【发布时间】:2016-12-27 22:46:16
【问题描述】:
换句话说,以下行是否保证打印num行?
int num = list.stream().peek(System.out::println).count();
这个问题是由https://stackoverflow.com/a/41346586/2513200的cmet中的一个讨论引发的
我依稀记得一个讨论,避免迭代的优化可能是合法的,但在快速搜索过程中没有找到任何结论。
JavaDocs for Stream.count 包含以下声明:
这是归约的一种特殊情况,相当于:
return mapToLong(e -> 1L).sum();
但我不确定如果流能够以某种短路方式确定结果,这是否能提供任何保证。
【问题讨论】:
-
将在 Java 9 中进行修改(参见 API 说明):download.java.net/java/jdk9/docs/api/java/util/stream/…
-
result 是等效的,不保证执行任何操作。
-
在文档的那部分之后,您会发现:“如果实现可以直接从流源计算计数,则可以选择不执行流管道 [...]。在这种情况下,不会遍历任何源元素,也不会评估任何中间操作。"
标签: java java-8 java-stream