Java 8 非确定性foreach流上类,Java8

Java 8 非确定性foreach流上类,Java8,java-8,java-stream,Java 8,Java Stream,Java文档介绍了forEach on Stream类的方法: 此操作的行为显然是不确定的 因此,我的理解是,在同一个源上重复执行相同的流管道的顺序(因此不是并行)执行可能会产生不同的结果,即使源具有encouter顺序。是这样吗?有人能给我举个例子来说明吗?管道中的元素可以并行处理(参见条目)相互独立,因此各个元素的中间操作可能会有所不同-因此,如果在并行模式下的流上调用终端操作,则顺序是不可预测的 它还可能取决于流来源的数据源(例如,它是HashSet)和中间操作-请参阅条目 检查是否有任何

Java文档介绍了forEach on Stream类的方法:

此操作的行为显然是不确定的


因此,我的理解是,在同一个源上重复执行相同的流管道的顺序(因此不是并行)执行可能会产生不同的结果,即使源具有encouter顺序。是这样吗?有人能给我举个例子来说明吗?

管道中的元素可以并行处理(参见条目)相互独立,因此各个元素的中间操作可能会有所不同-因此,如果在并行模式下的流上调用终端操作,则顺序是不可预测的

它还可能取决于流来源的数据源(例如,它是
HashSet
)和中间操作-请参阅条目


检查是否有任何中间操作引入并行性
myStream.isParallel()==true
或中断排序
myStream.unordered()

如果您想要相同的输出顺序,可能应该使用
forEachOrdered
而不是
forEach
。酷问题tho!目前的实施没有利用这个机会,因此没有任何例子。感谢您的回复@dawid gdanski。对我来说奇怪的是javadoc说forEach是显式的不确定性的。我知道,即使对于非并行和有序的流,它也是不确定的,我发现了维尔德。@BrunoBravo你的理解是正确的。请记住,无论流是顺序流还是并行流,您始终可以对同时发布订购契约的流调用
unordered()