在Stream接口中:
中间操作可分类为有状态和无状态。它们会影响并行流的结果。
只有两个终止操作是不确定性方法:findAny()和forEach(Consumer)。它们会影响并行流的结果。
如果执行惰性操作,中间的无状态操作可能会产生副作用。这会影响并行流的结果。
中间操作可以分类为:
有状态
- distinct() - sorted() - limit (long l) - skip (long l)
无状态
- map (Function f) - flatMap (Function f) - filter (Predicate p) - peek (Consumer c)
以下是我的两个问题:
1. 无状态中间方法 - 如果我在并行流上调用无状态中间方法+不确定性的forEach(),那么我将得到与顺序流相同的结果,但顺序不同。 - 如果我在并行流上调用无状态中间方法+不确定性的findAny(),我将得到一个不可预测的结果。 - 如果我在并行流上调用无状态中间方法+正常终止操作,我将得到与顺序流相同的结果。 - 如果我在并行流上调用无状态中间方法+具有副作用的正常终止操作,我将得到一个不可预测的结果。
2. 有状态中间方法 - 如果我调用有状态的中间方法+不确定性的forEach(),我将得到与顺序流相同的结果,但顺序不同。 - 如果我调用有状态的中间方法+不确定性的findAny(),我将得到一个不可预测的结果。 - 如果我调用有状态的中间方法+正常终止操作,我将得到与顺序流相同的结果。
这些规则是否正确?
除非我调用BaseStream方法:unordered(),否则Stream元素的顺序是“遇到的顺序”。在有状态或无状态方法存在时,元素的顺序是否影响流的结果?如果是,如何影响?
非常感谢!
A.
中间操作可分类为有状态和无状态。它们会影响并行流的结果。
只有两个终止操作是不确定性方法:findAny()和forEach(Consumer)。它们会影响并行流的结果。
如果执行惰性操作,中间的无状态操作可能会产生副作用。这会影响并行流的结果。
中间操作可以分类为:
有状态
- distinct() - sorted() - limit (long l) - skip (long l)
无状态
- map (Function f) - flatMap (Function f) - filter (Predicate p) - peek (Consumer c)
以下是我的两个问题:
1. 无状态中间方法 - 如果我在并行流上调用无状态中间方法+不确定性的forEach(),那么我将得到与顺序流相同的结果,但顺序不同。 - 如果我在并行流上调用无状态中间方法+不确定性的findAny(),我将得到一个不可预测的结果。 - 如果我在并行流上调用无状态中间方法+正常终止操作,我将得到与顺序流相同的结果。 - 如果我在并行流上调用无状态中间方法+具有副作用的正常终止操作,我将得到一个不可预测的结果。
2. 有状态中间方法 - 如果我调用有状态的中间方法+不确定性的forEach(),我将得到与顺序流相同的结果,但顺序不同。 - 如果我调用有状态的中间方法+不确定性的findAny(),我将得到一个不可预测的结果。 - 如果我调用有状态的中间方法+正常终止操作,我将得到与顺序流相同的结果。
这些规则是否正确?
除非我调用BaseStream方法:unordered(),否则Stream元素的顺序是“遇到的顺序”。在有状态或无状态方法存在时,元素的顺序是否影响流的结果?如果是,如何影响?
非常感谢!
A.