Stream.of("AAA","BBB","CCC").parallel().forEach(s->System.out.println("Output:"+s));Stream.of("AAA","BBB","CCC").parallel().forEachOrdered(s->System.out.println("Output:"+s));第二行将始终输出
Output:AAAOutput:BBBOutput:CCC
而第一个不保证,因为不保留顺序。
forEachOrdered将按照其源指定的顺序处理流的元素,而不管该流是顺序的还是并行的。
引用
forEachJavadoc:
该操作的行为明确地是不确定的。对于并行流管道,此操作不能保证尊重流的遇到顺序,因为这样做会牺牲并行性的好处。
当
forEachOrderedJavadoc声明时(强调我的意思):
如果流具有已定义的遇到顺序,则按流 的遇到顺序 对此流的每个元素执行操作。



