并行流上的iterator()保证遇到命令?

Dav*_*ton 12 java java-stream

Stream.of(a, b, c).parallel().map(Object::toString).iterator();
Run Code Online (Sandbox Code Playgroud)

返回的迭代器是否保证按顺序提供值2,3,4?

我知道toArray()和collect()保证集合的值正确.另外,我不是问如何从迭代器创建流.

Stu*_*rks 7

这是规范中的疏忽.如果流具有已定义的遭遇顺序,则意图是其Iterator按照遭遇顺序生成元素.如果流没有定义的遭遇顺序,迭代器当然会按某种顺序生成元素,但不会定义该顺序.

我已经提交了错误JDK-8194952来跟踪对规范的更改.

看起来其他人已经爬过足够的实现来表明它确实会产生遇到顺序的元素.此外,我们的流测试依赖于此属性.例如,对toList收集器的测试断言列表中的元素的顺序与从流的迭代器中获得的顺序相同.所以,依靠这种行为可能是安全的,即使它尚未正式指定(尚未).

  • 是的,其他操作也需要澄清,即使`map`和`filter`也没有指定任何内容.或者只是添加一个明确的声明,即操作维护遭遇顺序(如果有的话),除非另有说明.如果我们在它,`max()`和`min()`返回第一个,如果有序流的并列,或者例如`reduce((a,b) - > a)`返回第一个元素, RESP.`reduce((a,b) - > b)`返回最后一个元素也只是隐式的.如果只有一个输入是无序的,那么`Stream.concat`是无序的,例如`concat(range(0,10),empty())`,是显式的,但是*可怕的*决定...... (2认同)