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

标签 java-8 distinct grouping java-stream unordered

我正在学习 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/

相关文章:

listview - Xamarin 表单 ListView 组标题模板不起作用

返回分组数据子组的最小值

java - 使用 Java 流合并列表中相同对象下的列表

java - 如何在方法内部更改传递的 Lambda 表达式的值

sql - 为什么 hibernate hql distinct 会导致 sql 在左连接中不同?

mysql - MySQL 尝试从两个不同的表获取数据时获取重复记录

PHP SQL 用户分组

java 8 收集列表<字符串>

java - 如何对 n 个散列图使用 java 8 合并函数

ruby-on-rails - Rails & Mongoid 独特的结果