Hul*_*ulk 7 java java-8 java-stream
换句话说,是否保证以下行打印num线?
int num = list.stream().peek(System.out::println).count();
Run Code Online (Sandbox Code Playgroud)
这个问题是由/sf/answers/2894261051/的评论中的讨论引发的
我依稀记得一个讨论,即避免迭代的优化可能是合法的,但在快速搜索期间没有找到任何结论.
Stream.count的JavaDocs包含以下语句:
这是减少的特殊情况,相当于:
return mapToLong(e -> 1L).sum();
但我不确定这是否能提供任何保证,如果流可以某种方式以短路的方式确定结果.
Tag*_*eev 13
不,不是.由于优化的count()实现,它不会在Java 9中完成(如果预先知道流大小,它将跳过迭代).
有关更多详细信息,请参阅JDK-8067969.JDK-9中的文档已相应更新:
如果实现可以直接从流源计算计数,则实现可以选择不执行流管道(顺序地或并行地).在这种情况下,不会遍历任何源元素,也不会评估中间操作.除了诸如调试之类的无害情况之外,强烈不鼓励具有副作用的行为参数可能会受到影响.
| 归档时间: |
|
| 查看次数: |
197 次 |
| 最近记录: |