gpt4 book ai didi

java - Streams - parallel() + skip() 不显示元素

转载 作者:行者123 更新时间:2023-12-05 03:21:27 28 4
gpt4 key购买 nike

我对以下两个代码有疑问。

没有并行性:

Stream.of(1, 2, 3)
.peek(System.out::println)
.skip(1)
.map(n-> n * 10)
.forEach(System.out::println);

输出是:

1
2
20
3
30

具有并行性:

Stream.of(1, 2, 3)
.parallel()
.peek(System.out::println)
.skip(1)
.map(n-> n * 10)
.forEach(System.out::println);

输出是:

2
3
20
30

为什么并行流的输出不包含1

最佳答案

skip() 没有任何问题,您已经要求跳过 1 元素,它总是这样做。 Stream.of() 创建的流是有序的并且 skip()保证始终考虑遇到顺序。

is constrained to skip not just any n elements, but the first n elements in the encounter order.

因为我们在输出中没有看到 10,这证明 skip() 正确地完成了它的工作 - 元素 1 永远不会到达终端运行。

peek() 没有输出并行(1 未打印)。

此方法通过副作用运行,并根据 API 注释“存在主要是为了支持调试”。与 forEach()/forEachOrdered() 相反,它是一个中间操作,并不意味着执行结果操作。 API documentation警告它可能被忽略,你不应该依赖它。

The eliding of side-effects may also be surprising. With the exception of terminal operations forEach and forEachOrdered, side-effects of behavioral parameters may not always be executed when the stream implementation can optimize away the execution of behavioral parameters without affecting the result of the computation.

关于java - Streams - parallel() + skip() 不显示元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72987975/

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