Java 8 并行流toArray维持秩序
我读过关于并发收集器维护输入列表顺序的文章。因此,如果我使用收集器来ArrayList,它可以保证有序收集。Java 8 并行流toArray维持秩序,java-8,java-stream,collectors,Java 8,Java Stream,Collectors,我读过关于并发收集器维护输入列表顺序的文章。因此,如果我使用收集器来ArrayList,它可以保证有序收集。 此外,有序列表上的映射函数也可以维护顺序。 我在toArray找不到任何关于订单保存的文档 即使管道被限制生成与流源的相遇顺序一致的结果(例如,IntStream.range(0,5).parallel().map(x->x*2).toArray()必须生成[0,2,4,6,8]),也不能保证映射器函数应用于单个元素的顺序,或者在哪个线程中为给定元素执行任何行为参数 我也会 Stream
此外,有序列表上的映射函数也可以维护顺序。
我在toArray找不到任何关于订单保存的文档 即使管道被限制生成与流源的相遇顺序一致的结果(例如,IntStream.range(0,5).parallel().map(x->x*2).toArray()必须生成[0,2,4,6,8]),也不能保证映射器函数应用于单个元素的顺序,或者在哪个线程中为给定元素执行任何行为参数 我也会
Stream.map(x->x).toArray()
产生有序的结果?或者我应该使用收集器。引用的部分已经举例说明,map
和toArray
将维持遭遇顺序
当您浏览时,您将看到它从未明确声明维护遭遇顺序的操作,但相反,它明确声明了操作无序或具有特殊策略的时间,具体取决于有序状态
- 显然,
会显式收回遭遇顺序unordered()
和forEach
不尊重遭遇顺序findAny
如果两个输入流中至少有一个是无序的,则返回一个无序流(一个有争议的行为,但事实就是这样)Stream.concat
生成无序流Stream.generate()
、skip
、limit
和takeWhile
遵守遭遇顺序,这可能会在并行执行中造成严重的性能损失dropWhile
和distinct()
对于有序流是稳定的,sorted()
在流无序时可能具有更好的并行性能distinct()
如果收集器是无序的,则可能表现为无序,这仅由语句暗示,如果收集器是并发的,并且流是无序的,或者收集器是无序的,则操作将是并发的。有关更多详细信息,我们必须参考和collect(Collector)
请注意,虽然操作
count()
、allMatch
、anyMatch
和noneMatch
没有关于遭遇顺序的语句,但这些操作的语义意味着结果根本不应该依赖于遭遇顺序。引用的文档部分不够明确吗?