Adr*_*r83 5 java side-effects stateful stateless java-stream
在界面Stream中:
中间操作可分为有状态和无状态.它们会影响并行Stream的结果.
只有两个终端操作是非确定性方法:findAny()和forEach(Consumer).它们会影响并行Stream的结果.
中间操作可分类为:
有状态
无状态
这是我的两个问题:
如果我在并行流上调用无状态中间方法,我将获得顺序流的相同结果,但顺序不同.如果我在并行流上调用有状态中间方法,我将获得顺序流的相同结果.这些规则是基本的,但这些规则如何在存在非确定性终端方法的情况下发生变化?并存在副作用(对于无状态方法)?
Stream元素的顺序是"遇到顺序",除非我调用BaseStream方法:unordered().元素的顺序是否会影响流的结果(存在有状态或无状态方法)?如果有,怎么样?
非常感谢!
一个.
小智 2
我猜条件 1 和 2 都成立。我想添加一些操作。
reduce也是有状态操作的一部分。
forEach是无状态操作的一部分。
请注意,如果无状态操作产生副作用,则它们可能会变成有状态操作。
第三种说法并不完全正确。如果一个流是有序的并且我们并行处理它,则该流在与无状态操作一起使用时将保持有序。这就是为什么我们需要在流上调用该方法,unordered()使其变得无序,提高效率。