首页 > 解决方案 > 流类上的非确定性 foreach,Java 8

问题描述

Java 文档说明了 Stream 类的 forEach 方法:

此操作的行为是明确的非确定性的。

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

标签: java-8java-stream

解决方案


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

它还可能取决于流所源自的数据源(HashSet例如)以及介于两者之间的中间操作 - 请参阅排序条目。

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


推荐阅读