这听起来像两个重复 - 因为你链接的答案实际上解释了事情。我不知道是否 map 要么 filter 应该具体说他们保持秩序;他们不依赖任何 以前 国家或任何其他国家(这些是无国籍行动)所以它是 默示 就我所见,他们保留了秩序。我反过来看,如果他们没有保留订单 - 应该在文档中明确提到;如果从操作的名称不明显。 例如 Stream.generate 如果它生成一个有序流,对我来说并不明显;因此,在它的文档中说:
map
filter
Stream.generate
返回无限顺序无序流,其中每个元素由提供的Supplier生成。
sorted 和 unordered 另一方面,很明显(IMO)改变秩序,至少当你把它们放进去时 - 你明确地说你不关心订单。 unordered 顺便说一下,为了满足这个要求,我们不会做任何随机化,你可以阅读更多 这里 。
sorted
unordered
一般有两个订单: 处理订单 和 遇到订单 。
你可以考虑一下 遇到订单 从左到右处理(想象你有一个 List 或者 array )。因此,如果你有一个不改变顺序的管道 - 元素将被输入到 Collector (从左到右看)(或任何其他终端操作)。好吧不是 所有 终端操作是这样的。一个明显的区别是 forEach 和 forEachOrdered ;或者a Collectors.toSet - 根本不需要保留初始订单。或者让我们来看看吧 findAny 作为终端操作 - 显然你不关心你想要哪个元素,所以为什么要费心去喂 findAny 首先按照确切的顺序?
List
array
Collector
forEach
forEachOrdered
Collectors.toSet
findAny
处理订单 另一方面,没有明确的顺序 - 特别是对于并行处理显而易见。因此,即使您的管道是并行的(并且在完全不保证任何订单的情况下处理元素),它们仍将按顺序馈送到终端操作 - 如果该终端操作需要这样的订单。
在对源代码进行一些研究之后,我总结了以下表格:
取自: Java流 - 第6部分 - Spliterator
下表显示了允许哪些操作类型修改字符:
| | DISTICTS | SORTED | ORDERED | SIZED | SHORT_CIRCUIT | | ---------------------- | -------- | ------ | ------- | ----- | --------------| | source stream | Y | Y | Y | Y | N | | intermediate operation | PCI | PCI | PCI | PC | PI | | terminal operation | N | N | PC | N | PI |
取自 Java流 - 流方法特征表
下表显示了每个特征和标志 中间操作 / 终端操作 可以打开和关闭:( SHORT_CIRCUIT 仅在相关的背景下是相关的 StreamOpFlag 标志)
SHORT_CIRCUIT
StreamOpFlag
的 注意: P (保留)标志被添加到除了具有的那些单元格之外的每个单元格 C 和 I (清除和注入)标志。 强>
P
C
I
| | DISTINCT | SORTED | ORDERED | SIZED | SHORT_CIRCUIT | | ---------------- | ----------| --------| ---------| -------| ---------------| | filter | | | | C | | | forEach | | | C | | | | forEachOrdered | | | | | | | allMatch | | | C | | I | | distinct | I | | | C | | | flatMap | C | C | | C | | | anyMatch | | | C | | I | | collect | | | | | | | unOrdered | | | C | | | | count | C | C | C | C | | | findAny | | | C | | I | | findFirst | | | | | I | | flatMapToXXX | C | C | | C | | | limit | | | | C | I | | map | C | C | | | | | mapToXXX | C | C | | | | | max | | | | | | | min | | | | | | | noneMatch | | | C | | I | | peek | | | | | | | reduce | | | | | | | skip | | | C | I | | | sorted | | I | I | | | | toArray | | | | | |