我必须遵循以下代码:
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
public class TimeZonesExample
{
public static void main(String[] args)
{
Set<String> allZones = ZoneId.getAvailableZoneIds();
LocalDateTime localDateTime = LocalDateTime.now();
List<String> zoneList = new ArrayList<>(allZones);
for (String s : zoneList)
{
ZoneId zoneId = ZoneId.of(s);
ZonedDateTime zoneDateTime = localDateTime.atZone(zoneId);
ZoneOffset zoneOffset = zoneDateTime.getOffset();
String out = String.format("%35s %10s%n", zoneId, zoneOffset);
System.out.printf(out);
}
}
}
Run Code Online (Sandbox Code Playgroud)
这产生了这样一个列表:
Asia/Aden +03:00
America/Cuiaba -03:00
Etc/GMT+9 -09:00
Etc/GMT+8 -08:00
Africa/Nairobi +03:00
America/Marigot -04:00 …Run Code Online (Sandbox Code Playgroud) 我想比较几周的字符串表示,例如"01/17"周在"02/17"之前和"52/16"之后.
以下代码抛出一个异常,我猜是因为我的字符串没有暗示每周的确切日期.但是,我不在乎 - 它可能都是星期一或星期四或其他什么:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("ww/YY", Locale.GERMANY);
LocalDate date1 = formatter.parse(str1, LocalDate::from);
Run Code Online (Sandbox Code Playgroud)
我需要修改解析器吗?或者解析其他格式?Unfortunatley几周没有像YearMonth这样的对象......
嗨,我在执行代码时遇到错误:
java.lang.IllegalStateException: Duplicate key ad.ecs.core.scriptengine.SiteIDAndNPI@3a75ce6f
at java.util.stream.Collectors.lambda$throwingMerger$0(Collectors.java:133)
at java.util.HashMap.merge(HashMap.java:1253)
at java.util.stream.Collectors.lambda$toMap$58(Collectors.java:1320)
at java.util.stream.ReduceOps$3ReducingSink.accept(ReduceOps.java:169)
at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1374)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
at ad.ecs.core.scriptengine.Utils.getInterfaceIDsWithSiteIDAndNPI(Utils.java:689)
Run Code Online (Sandbox Code Playgroud)
我正在尝试将我的列表分组到地图中:
public static Map<Integer, SiteIDAndNPI> getInterfaceIDsWithSiteIDAndNPI(Session session) {
@SuppressWarnings("unchecked")
List<Srvsetup> srvsetups = session.createCriteria(Srvsetup.class)
.add(Restrictions.gt("scriptinterfaceid", 0))
.list();
Map<Integer, SiteIDAndNPI> interfaceIDs = srvsetups.stream()
.collect(Collectors.toMap(srv -> srv.getScriptinterfaceid(),
srv -> getSiteIDAndNPI(srv.getId().getSiteid(), session)));
@SuppressWarnings("unchecked")
List<Facsetup> facsetups = session.createCriteria(Facsetup.class)
.add(Restrictions.gt("scriptinterfaceid", 0))
.list();
interfaceIDs.putAll(facsetups.stream()
.collect(Collectors.toMap(fac -> fac.getScriptinterfaceid(),
fac -> getSiteIDAndNPI(fac.getPlid(), session))));
return interfaceIDs;
}
public static SiteIDAndNPI getSiteIDAndNPI(int siteID, Session …Run Code Online (Sandbox Code Playgroud) 例如,我有这个接口:
package tester;
public interface Calculator{
public int calculate(int a,int b);
}
Run Code Online (Sandbox Code Playgroud)
要么
package tester;
@FunctionalInterface
public interface Calculator{
public int calculate(int a,int b);
}
Run Code Online (Sandbox Code Playgroud)
我也可以将第一个视为功能界面.例如 :
package tester;
public class A {
int a;
int b;
int sum;
A(Calculator c,int e, int d){
a=e;
b=d;
sum =c.calculate(a, b);
}
int get(){
return sum;
}
}
Run Code Online (Sandbox Code Playgroud)
班长
package tester;
public class runner {
public static void main(String a[]){
System.out.println(new A((x,b)-> (x+b),1,2).get());
}
}
Run Code Online (Sandbox Code Playgroud)
代码可以使用或不使用注释,那么为什么注释呢?为什么不能说任何具有单一方法的接口都可以作为功能接口?
如何将此lambda表达式转换为方法引用.这rs是一个ResultSet和rowNum是int.
(rs, rowNum) -> getXYZ(rs,rowNum);
Run Code Online (Sandbox Code Playgroud) 我从GPS接收器接收到时间戳,它以秒为单位的微秒时间表示:
00:12:34.567891
Run Code Online (Sandbox Code Playgroud)
Java 7及更低版本仅使用毫秒时间,因此我可以拆分字符串并将微秒部分解析为毫秒,但这似乎很荒谬。
Java 8以纳秒精度运行,但是如果我使用日期模式为“ HH:mm:ss.nnnnnn”的DateTimeFormatter,则“。”之后的部分会出现。以纳秒为单位考虑?
从本质上讲,我该如何获取我的微秒时间戳并将其转换为毫秒总数。
我有一个列表(GlobalBooks),看起来类似于下面
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
GlobalBooks globalBooks = new GlobalBooks();
List<Book> bookList = new ArrayList<Book>();
Book book = new Book();
List<BookContent> bookContents = new ArrayList<BookContent>();
book.setBookName("A");
BookContent content = new BookContent();
content.setDescription("December 2016");
content.setComponentID(20l);
bookContents.add(content);
content = new BookContent();
content.setDescription("January 2016");
content.setComponentID(30l);
bookContents.add(content);
content = new BookContent();
content.setDescription("Febuary 2016");
content.setComponentID(40l);
bookContents.add(content);
book.setContents(bookContents);
bookList.add(book);
book = new Book();
bookContents = new ArrayList<BookContent>();
book.setBookName("B");
content = new BookContent();
content.setDescription("December 2016");
content.setComponentID(20l);
bookContents.add(content); …Run Code Online (Sandbox Code Playgroud) 为什么toString我在使用时无法解决该方法Arrays.stream()或IntStream:
int row[] = ...
Arrays.stream(row)
.map(Arrays::toString)
.forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)
但是,另一方面,它可以在我使用时解决Stream.of():
int row[] = ...
Stream.of(row)
.map(Arrays::toString)
.forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud) 假设我有下一段代码:
void doSmtng(A a){
if (a!=null){
B b = a.getB();
if (b != null){
C c = b.getC();
if (c != null){
d = c.getD();
}
}
}
doSmtngWithD(d);
}
Run Code Online (Sandbox Code Playgroud)
让我们说,我可以改变的,而不是获得API A,B,C,D我可以得到Optional<A>,Optional<B>等等.
编写更美观的代码以阻止所有这些空检查的正确方法是什么?另外,一旦变量(a,b,c,d ..)中的一个为空,有没有办法按照我的要求添加抛出异常?
我想组合列表中的每两个字符串并使用java8流返回组合列表:
List<String> list;
Stream.concat(list.stream(), list.stream())
.collect(toList());
Run Code Online (Sandbox Code Playgroud)
但是,此代码不会生成组合,只会生成列表的元素.我究竟做错了什么.我还希望这个代码可以并行化,以便它可以在多个内核上运行