GA1*_*GA1 2 grouping distinct unordered java-8 java-stream
我正在学习 Oracle 的 Stream API Java 1.8 课程,在阅读讲义时偶然发现了这一点:
无序():
– 继承自 BaseStream
– 返回一个无序的流(内部使用)
– 可以提高distinct()和groupingBy()等操作的效率
这是我的问题。无序的属性如何导致更有效的计算distinct()
和groupingBy()
它仅在并行流的情况下才有意义。在有序并行流的情况下,distinct()
操作必须做额外的工作以保持其稳定性保证,即,
对于重复元素,保留遇到顺序中最先出现的元素
(请参阅Stream.distinct()的javadoc 中的 API Note 部分。
在无序并行流的情况下,不需要保持这样的保证,因为流已经是无序的。这样,从有序并行流中去除有序特征可以大大提高distinct()
操作的性能。
类似地,对于groupingBy()
操作来说,在并行流的情况下,取消保留流顺序的要求可以大大提高操作的效率,因为减少本身可以并发执行。请注意,这只会在使用并发收集器从并行流中收集时发生,收集器或流本身是无序的。实际上,您需要使用Stream.collect(groupingByConcurrent(..))
代替Stream.collect(groupingBy(..))
. 查看javadoc了解Stream.collect()
和Collector
更多的细节。
归档时间: |
|
查看次数: |
456 次 |
最近记录: |