Questions tagged «java-8»

对于2014年3月18日发行的Java平台的第8版(内部版本1.8)特定于Java 8的问题,请使用此标记。在大多数情况下,您还应该指定java标记。

5
Java8:为什么禁止为java.lang.Object中的方法定义默认方法
默认方法是Java工具箱中一个不错的新工具。但是,我试图编写一个定义方法default版本的接口toString。Java告诉我这是禁止的,因为在中声明了方法java.lang.Object可能无法default编辑。为什么会这样呢? 我知道有一个“基类总是赢”的规则,因此默认情况下(pun;),default该Object方法的任何实现都会被该方法覆盖Object。但是,我认为没有理由为什么Object规范中的方法不应有例外。尤其是因为toString默认实现可能非常有用。 那么,Java设计者决定不允许default方法覆盖方法的原因是什么Object?


5
将Java 7编译代码升级到Java 8有什么好处?
我有一个使用Java 7编写的旧应用程序。它在Java 8 JRE中运行良好。我不打算重写任何代码来利用Java 8功能。将编译后的代码升级到最新的Java 8 JDK有什么技术好处? 需要明确的是,该代码当前是使用Java 7编译的,并且已经与最新的Java 8 JRE一起运行。它应该已经从Java 8运行时改进中受益。问题是,使用版本8进行编译并使用Java 8编译的字节码运行是否会获得任何好处。 另外,我也不关心开发人员生产率之类的非技术利益。我认为这些很重要,但不是这个问题的重点。我要的是没有开发团队的生产代码。它完全处于维护模式。
127 java  performance  java-8 


4
使用流中的Java 8 foreach循环移至下一项
我在Java 8 foreach的流中遇到问题,试图在循环中的下一个项目上移动。我无法将命令设置为continue;,仅能return;正常工作,但在这种情况下您将退出循环。我需要循环移动下一个项目。我怎样才能做到这一点? 示例(不起作用): try(Stream<String> lines = Files.lines(path, StandardCharsets.ISO_8859_1)){ filteredLines = lines.filter(...).foreach(line -> { ... if(...) continue; // this command doesn't working here }); } 示例(工作): try(Stream<String> lines = Files.lines(path, StandardCharsets.ISO_8859_1)){ filteredLines = lines.filter(...).collect(Collectors.toList()); } for(String filteredLine : filteredLines){ ... if(...) continue; // it's working! }
126 java  java-8 


10
复制流,以避免“流已被操作或关闭”
我想复制一个Java 8流,以便可以处理两次。我可以collect列出并从中获得新的信息流; // doSomething() returns a stream List<A> thing = doSomething().collect(toList()); thing.stream()... // do stuff thing.stream()... // do other stuff 但是我认为应该有一种更有效/更优雅的方法。 有没有一种方法可以复制流而不将其转换为集合? 我实际上正在使用Eithers 流,因此想要先处理左侧投影,然后再移至右侧投影并以另一种方式处理。有点像这样(到目前为止,我被迫使用这种toList技巧)。 List<Either<Pair<A, Throwable>, A>> results = doSomething().collect(toList()); Stream<Pair<A, Throwable>> failures = results.stream().flatMap(either -> either.left()); failures.forEach(failure -> ... ); Stream<A> successes = results.stream().flatMap(either -> either.right()); successes.forEach(success -> ... …

3
在Java8中使用时区格式化LocalDateTime
我有这个简单的代码: DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyyMMdd HH:mm:ss.SSSSSS Z"); LocalDateTime.now().format(FORMATTER) 然后我将得到以下异常: java.time.temporal.UnsupportedTemporalTypeException: Unsupported field: OffsetSeconds at java.time.LocalDate.get0(LocalDate.java:680) at java.time.LocalDate.getLong(LocalDate.java:659) at java.time.LocalDateTime.getLong(LocalDateTime.java:720) at java.time.format.DateTimePrintContext.getValue(DateTimePrintContext.java:298) at java.time.format.DateTimeFormatterBuilder$OffsetIdPrinterParser.format(DateTimeFormatterBuilder.java:3315) at java.time.format.DateTimeFormatterBuilder$CompositePrinterParser.format(DateTimeFormatterBuilder.java:2182) at java.time.format.DateTimeFormatter.formatTo(DateTimeFormatter.java:1745) at java.time.format.DateTimeFormatter.format(DateTimeFormatter.java:1719) at java.time.LocalDateTime.format(LocalDateTime.java:1746) 如何解决这个问题?
121 java  java-8  java-time 

3
获取符合条件的第一个元素
如何获取与流中的条件匹配的第一个元素?我已经尝试过了但是没用 this.stops.stream().filter(Stop s-> s.getStation().getName().equals(name)); 该条件不起作用,在除Stop之外的其他类中调用filter方法。 public class Train { private final String name; private final SortedSet<Stop> stops; public Train(String name) { this.name = name; this.stops = new TreeSet<Stop>(); } public void addStop(Stop stop) { this.stops.add(stop); } public Stop getFirstStation() { return this.getStops().first(); } public Stop getLastStation() { return this.getStops().last(); } …
121 java  java-8  java-stream 

9
除了保存代码行以外,lambda表达式还有什么用吗?
除了保存代码行以外,lambda表达式还有什么用吗? lambdas是否提供任何特殊功能来解决难以解决的问题?我所看到的典型用法是代替编写此代码: Comparator<Developer> byName = new Comparator<Developer>() { @Override public int compare(Developer o1, Developer o2) { return o1.getName().compareTo(o2.getName()); } }; 我们可以使用lambda表达式来缩短代码: Comparator<Developer> byName = (Developer o1, Developer o2) -> o1.getName().compareTo(o2.getName());
120 java  lambda  java-8 

4
CompletableFuture | thenApply与thenCompose
我无法理解thenApply()和之间的区别thenCompose()。 那么,有人可以提供有效的用例吗? 从Java文档中: thenApply(Function<? super T,? extends U> fn) 返回一个新值CompletionStage,当此阶段正常完成时,将使用该阶段的结果作为所提供函数的参数来执行该操作。 thenCompose(Function<? super T,? extends CompletionStage<U>> fn) 返回一个新值CompletionStage,当此阶段正常完成时,将以该阶段作为所提供函数的参数来执行此操作。 我得到的thenCompose扩展的CompletionStage 的第二个参数thenApply没有。 有人可以提供一个例子,说明我必须在什么情况下使用thenApply以及何时使用thenCompose?

6
在Java 8中,带有2个箭头的lambda是什么意思?
我之前阅读过一些Java 8教程。 现在我遇到以下主题: Java是否支持Currying? 在这里,我看到以下代码: IntFunction<IntUnaryOperator> curriedAdd = a -> b -> a + b; System.out.println(curriedAdd.apply(1).applyAsInt(12)); 我了解此示例包含2个元素,但无法理解其构造: a -> b -> a + b; 根据表达式的左侧,该行应实现以下功能: R apply(int value); 在此之前,我只遇到一个箭头就遇到了lambda。
118 java  lambda  java-8  currying 

3
PermGen和Metaspace有什么区别?
直到Java 7为止,JVM内存中都有一个称为PermGen的区域,JVM用来保留其类。在Java 8中,已将其删除并替换为名为Metaspace的区域。 什么是最重要的区别 PermGen的和元空间之间? 我知道的唯一区别是,java.lang.OutOfMemoryError: PermGen space不再可以抛出该异常,并且MaxPermSize忽略了VM参数。

3
如何使用Lambda表达式检查元素是否存在?
具体来说,我有TabPane,我想知道其中是否包含具有特定ID的元素。 因此,我想使用Java中的lambda表达式来做到这一点: boolean idExists = false; String idToCheck = "someId"; for (Tab t : tabPane.getTabs()){ if(t.getId().equals(idToCheck)) { idExists = true; } }
118 java  java-8  lambda 

3
使用新的日期时间API格式化日期
我正在使用新的日期时间API,但是在运行时: public class Test { public static void main(String[] args){ String dateFormatted = LocalDate.now() .format(DateTimeFormatter .ofPattern("yyyy-MM-dd HH:mm:ss")); System.out.println(dateFormatted); } } 它抛出: Exception in thread "main" java.time.temporal.UnsupportedTemporalTypeException: Unsupported field: HourOfDay at java.time.LocalDate.get0(LocalDate.java:680) at java.time.LocalDate.getLong(LocalDate.java:659) at java.time.format.DateTimePrintContext.getValue(DateTimePrintContext.java:298) at java.time.format.DateTimeFormatterBuilder$NumberPrinterParser.format(DateTimeFormatterBuilder.java:2543) at java.time.format.DateTimeFormatterBuilder$CompositePrinterParser.format(DateTimeFormatterBuilder.java:2182) at java.time.format.DateTimeFormatter.formatTo(DateTimeFormatter.java:1745) at java.time.format.DateTimeFormatter.format(DateTimeFormatter.java:1719) at java.time.LocalDate.format(LocalDate.java:1685) at Test.main(Test.java:23) 查看LocalDate类的源代码时,我看到: private int …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.