Tag: java 8

如何将LocalDate转换为即时?

我使用Java 8的新DateTime API。 如何将LocalDate转换为即时? 我得到一个exception LocalDate date = LocalDate.of(2012, 2, 2); Instant instant = Instant.from(date); 我不明白为什么。

Eclipse + Java 8支持?

我怎样才能使Java 8与Eclipse一起工作? 我遵循这个指南,但不起作用。 我也看到了Eclipse Java 8 wiki页面 ,但是他们没有解释如何处理签出的git存储库。

什么实现细节使这个代码很容易失败?

这个问题不是关于HashMap不是线程安全的,而是关于它在HotSpot和JDK代码上的特定失败模式的众所周知和logging的事实。 我很惊讶这个代码在NPE中失败了: public static void main(String[] args) { Map<Integer, Integer> m = new HashMap<>(0, 0.75f); IntStream.range(0, 5).parallel().peek(i -> m.put(i, i)).map(m::get).count(); } 关于NPE来自哪里,没有什么神秘之处:在.map(m::get)步骤中,尝试解开null 。 5次运行中约有4次失败。 在我的机器上, Runtime#availableProcessors()报告8,所以推测5的长度范围被分成5个子任务,每个只有一个成员。 我也假设我的代码在解释模式下运行。 它可能会调用JIT编译的HashMap或Stream方法,但顶层被解释,因此排除了HashMap状态被加载到线程局部内存(寄存器/堆栈)的任何变化,从而推迟了由另一个线程观察更新。 如果五个put操作中的某些操作在同一时间不在同一个内核上执行,我不希望它破坏HashMap的内部结构。 考虑到工作量不大,个人任务的时间安排必须非常精确。 是否真的是准确的时间( commonPool的线程必须被commonPool ),还是有其他的途径导致Oracle / OpenJDK HotSpot失败? 我目前的版本是 java version "1.8.0_72" Java(TM) SE Runtime Environment (build 1.8.0_72-b15) Java HotSpot(TM) 64-Bit Server VM (build 25.72-b15, mixed mode) […]

在java中从lambda forEach()返回

我试图改变一些for-each循环到lambda forEach()方法来发现lambdaexpression式的可能性。 后继似乎是可能的: ArrayList<Player> playersOfTeam = new ArrayList<Player>(); for (Player player : players) { if (player.getTeam().equals(teamName)) { playersOfTeam.add(player); } } 用lambda forEach() players.forEach(player->{if (player.getTeam().equals(teamName)) {playersOfTeam.add(player);}}); 但下一个没有工作: for (Player player : players) { if (player.getName().contains(name)) { return player; } } 与lambda players.forEach(player->{if (player.getName().contains(name)) {return player;}}); 在最后一行的语法中是否有错,或者是否无法从forEach()方法返回?

如何将ZonedDateTime转换为date?

我想在我的数据库中设置一个服务器不可知的date时间,我相信最好的做法是设置一个UTCdate时间。 我的数据库服务器是Cassandra,Java的数据库驱动程序只能理解datetypes。 因此,假设在我的代码中,我正在使用新的Java 8 ZonedDateTime来获取UTC现在( ZonedDateTime.now(ZoneOffset.UTC) ),如何将此ZonedDateTime实例转换为“传统”date类?

Java 8时间API:如何parsing格式为“MM.yyyy”的string到LocalDate

我对Java 8时间API中的parsingdate有点不鼓励。 以前我可以很容易地写: String date = "04.2013"; DateFormat df = new SimpleDateFormat("MM.yyyy"); Date d = df.parse(date); 但是现在,如果我使用LocalDate并像这样做: String date = "04.2013"; DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM.yyyy"); LocalDate ld = LocalDate.parse(date, formatter); 我收到一个exception: java.time.format.DateTimeParseException: Text '04' could not be parsed at index 0 java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1948) java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1850) java.time.LocalDate.parse(LocalDate.java:400) java.time.LocalDate.parse(LocalDate.java:385) com.luxoft.ath.controllers.JsonController.region(JsonController.java:38) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) java.lang.reflect.Method.invoke(Method.java:483) org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:215) org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132) org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104) org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:749) […]

Java 8的stream:为什么并行stream更慢?

我正在玩Java 8的stream,不能理解我得到的性能结果。 我有2核心CPU(英特尔i73520M),Windows 8的64位和64位Java 8更新5.我正在做简单的地图串stream/并行串stream,发现并行版本有点慢。 当我运行这个代码: String[] array = new String[1000000]; Arrays.fill(array, "AbabagalamagA"); Stream<String> stream = Arrays.stream(array); long time1 = System.nanoTime(); List<String> list = stream.map((x) -> x.toLowerCase()).collect(Collectors.toList()); long time2 = System.nanoTime(); System.out.println((time2 – time1) / 1000000f); …我得到了600左右的结果。这个版本,使用并行stream: String[] array = new String[1000000]; Arrays.fill(array, "AbabagalamagA"); Stream<String> stream = Arrays.stream(array).parallel(); long time1 = System.nanoTime(); List<String> list = […]

Collectors.toMap()keyMapper – 更简洁的expression式?

我想在下面的“Collectors.toMap()”调用中为“keyMapper”函数参数提供一个更简洁的expression式: List<Person> roster = …; Map<String, Person> map = roster .stream() .collect( Collectors.toMap( new Function<Person, String>() { public String apply(Person p) { return p.getLast(); } }, Function.<Person>identity())); 看来我应该能够使用lambdaexpression式来embedded它,但我不能拿出一个编译。 (我对lambda非常陌生,所以这并不令人意外。) 谢谢。 – >更新: 正如接受的答案中指出的那样 Person::getLast 是我一直在寻找的,而且是我曾经尝试过的。 然而,Eclipse 4.3的夜晚版本是个问题 – 它标记为错误的。 从命令行编译(我应该在发布之前完成),它工作。 那么,现在是时候用eclipse.org提交一个bug了。 谢谢。

什么是Javastream中的“逃生 – 孵化操作”?

我正在阅读Java文档,遇到这样一句话 : 除了escape-hatch操作iterator()和spliterator() ,当调用terminal操作时开始执行,当terminal操作完成时结束。 我不确定什么是“逃生孵化”的意思。 有人能解释这个词吗?

.collect是否保证在并行stream上sorting?

鉴于我有一个stringList<String> toProcess 。 结果必须按原始顺序排列。 我想利用新的并行stream。 以下代码是否保证结果与原始列表中的顺序相同? // ["a", "b", "c"] List<String> toProcess; // should be ["a", "b", "c"] List<String> results = toProcess.parallelStream() .map(s -> s) .collect(Collectors.toList());