gpt4 book ai didi

java-8 - "unordered"如何帮助 "distinct()"和 "groupingBy"

转载 作者:行者123 更新时间:2023-12-02 04:02:10 26 4
gpt4 key购买 nike

我正在学习 Oracle 的 Stream API Java 1.8 类(class),我在仔细阅读讲义时偶然发现了这一点:

unordered():

– Inherited from BaseStream

– Returns a stream that is unordered (used internally)

– Can improve efficiency of operations like distinct() and groupingBy()

这是我的问题。无序的特性如何让distinct()groupingBy()的计算更加高效

最佳答案

它仅在并行流的情况下才有意义。对于有序并行流,distinct()操作必须做额外的工作才能保证其稳定性,即

for duplicated elements, the element appearing first in the encounter order is preserved

(请参阅 javadoc for Stream.distinct() 中的 API 注释部分。

对于无序并行流,不需要保留这样的保证,因为流已经是无序的。这样,从有序并行流中删除有序特征可以大大提高 distinct() 操作的性能。

同样,对于 groupingBy() 操作,取消保留流顺序的要求可以在并行流的情况下大大提高操作效率,因为归约本身可以同时执行。请注意,只有在使用并发收集器从并行流收集数据时才会发生这种情况,并且收集器或流本身是无序的。实际上,您需要使用 Stream.collect(groupingByConcurrent(..)) 而不是 Stream.collect(groupingBy(..))。请参阅 javadoc Stream.collect()Collector了解更多详情。

关于java-8 - "unordered"如何帮助 "distinct()"和 "groupingBy",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41364081/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com