我读到了关于维护输入列表顺序的并发收集器。因此,如果我使用收集器到ArrayList,它可以保证有序收集 还有序列表上的地图功能维持顺序 我在toArray
中找不到任何有关订单保存的文档即使管道被约束产生的结果与流源的遭遇顺序一致(例如,IntStream.range(0,5).parallel()。map(x - > x * 2 ).toArray()必须产生[0,2,4,6,8]),不保证mapper函数应用于单个元素的顺序,或者在什么线程中为a执行任何行为参数给定元素。
所以
Stream.map(x->x).toArray()
产生有序结果?或者我应该使用收藏家。
答案 0 :(得分:2)
the documentation中引用的部分已经通过示例说明,map
和toArray
都会维持遭遇顺序。
当你通过Stream
API documentation时,你会发现它永远不会对维持遭遇顺序的操作做出明确的陈述,但反之亦然,它明确说明操作是什么时候无序或具有特殊政策,具体取决于订购状态。
unordered()
明确撤回遭遇订单forEach
和findAny
不尊重遭遇订单Stream.concat
会返回一个无序流。Stream.generate()
生成无序流skip
,limit
,takeWhile
和dropWhile
尊重遭遇订单,这可能会导致并行执行中的重大性能损失distinct()
和sorted()
对于有序流是稳定的,distinct()
在流无序时可能具有明显更好的并行性能collect(Collector)
可能表现为无序,只有当收集器是并发的并且流是无序的或时,操作将是并发的语句暗示了这一点。收集器是无序的。有关详细信息,我们必须引用Collector
documentation和the builtin collectors。请注意,虽然操作count()
,allMatch
,anyMatch
和noneMatch
没有关于遭遇顺序的声明,但这些操作的语义意味着结果不应该依赖于遭遇顺序。