Java文档介绍了Stream类上的forEach方法:
此操作的行为明确地是不确定的。
所以我了解的是,即使源具有encouter顺序,在相同源上重复执行顺序(而不是并行)的相同流管道,也可能会产生不同的结果。那正确吗?有人可以给我一个例子来说明这一点吗?
答案 0 :(得分:2)
管道内部的元素可以彼此独立地并行处理(请参见Parallelism条目),因此使各个元素进行的中间操作可能会有所不同-因此,如果终端操作为在以并行模式工作的流上调用。
它也可能取决于流所源自的数据源(例如HashSet
)和两者之间的中间操作-请参见Ordering条目。
检查是否有任何中间操作引入并行性myStream.isParallel() == true
或中断顺序myStream.unordered()
。