gpt4 book ai didi

java - Java 8 Collector UNORDERED 特性是什么意思?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:01:24 27 4
gpt4 key购买 nike

在官方文档中你可以看到:

UNORDERED Indicates that the collection operation does not commit to preserving the encounter order of input elements.

如果没有任何示例,这不是很有帮助。

我的问题是,UNORDERED 特征到底是什么意思?我应该将它与 min 或 sum 等缩减收集器一起使用,还是仅适用于集合收集器?

在 OpenJDK 中,减少操作(min、sum、avg)看起来具有空特征。我希望在那里至少找到 CONCURRENTUNORDERED

最佳答案

在没有特殊请求的情况下,流操作必须表现得好像元素是按照源的遇到顺序处理的。对于某些操作——例如使用关联操作进行归约——可以遵守此约束并仍然获得高效的并行执行。但是,对于其他人来说,这种限制非常有限。而且,对于某些问题,此约束对用户没有意义。考虑以下流管道:

people.stream()
.collect(groupingBy(Person::getLastName,
mapping(Person::getFirstName));

与“Smith”关联的名字列表按照它们在初始流中出现的顺序出现在 map 中是否重要?对于一些问题,是的,对于一些不是——我们不希望流库为我们猜测。无序收集器表示可以按照与 Smith 姓氏在输入源中出现的顺序不一致的顺序将名字插入列表。通过放宽此约束,有时(并非总是),流库可以提供更高效的执行。

例如,如果你不关心这个订单保存,你可以执行它:

people.parallelStream()
.collect(groupingByConcurrent(Person::getLastName,
mapping(Person::getFirstName));

并发收集器是无序的,这允许优化共享底层 ConcurrentMap,而不是具有 O(log n) 映射合并步骤。放宽排序约束会带来真正的算法优势——但我们不能假设约束无关紧要,我们需要用户告诉我们这一点。使用 UNORDERED 收集器是告诉流库这些优化是公平游戏的一种方式。

关于java - Java 8 Collector UNORDERED 特性是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39942054/

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