gpt4 book ai didi

java - Stream.count() 是否保证访问每个元素?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:09:40 24 4
gpt4 key购买 nike

换句话说,下一行是否保证打印num行?

int num = list.stream().peek(System.out::println).count();

这个问题是由https://stackoverflow.com/a/41346586/2513200的评论中的讨论引发的

我依稀记得有一次讨论说避免迭代的优化可能是合法的,但在快速搜索期间没有找到任何结论。

JavaDocs for Stream.count包含此语句:

This is a special case of a reduction and is equivalent to:
return mapToLong(e -> 1L).sum();

但我不确定如果流可以以某种方式以短路方式确定结果,这是否提供任何保证。

最佳答案

不,不是。由于优化的 count() 实现,它不会在 Java 9 中执行此操作(如果流大小事先已知,它将跳过迭代)。

参见 JDK-8067969更多细节。 JDK-9 中的文档已相应更新:

An implementation may choose to not execute the stream pipeline (either sequentially or in parallel) if it is capable of computing the count directly from the stream source. In such cases no source elements will be traversed and no intermediate operations will be evaluated. Behavioral parameters with side-effects, which are strongly discouraged except for harmless cases such as debugging, may be affected.

关于java - Stream.count() 是否保证访问每个元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41347083/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com