首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java groupingBy收集器是否保留列表顺序?

Java groupingBy收集器是否保留列表顺序?
EN

Stack Overflow用户
提问于 2016-05-16 10:14:42
回答 1查看 4.7K关注 0票数 20

考虑一个列表List<People>,其中元素按People.getAge()的升序排序。如果我们使用Collectors.groupingBy(People::getCity)对此列表进行分组,那么每个组/城市的结果列表是否会按年龄排序?

在实践中,它似乎确实维护了秩序。我在找担保。

这个方法的Javadoc说:

如果不需要保留元素出现在结果地图收集器中的顺序,则使用groupingByConcurrent(函数)可以提供更好的并行性能

我不确定这是否指的是清单上物品的顺序。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-18 04:05:19

理解该合同的关键是在哪里写“元素出现的顺序”。它讨论了它们是否按顺序到达,这意味着它们是否按照顺序传递给密钥提取器Function和任何下游收集器;它没有说明顺序是否会在任何结果积累中保留;实际上,groupingBy的当前实现使用的是不保留密钥顺序的HashMap

您会问它是否指列表中项目的顺序。如果您指的是创建流的列表,则列表上创建的流确实按顺序开始,但有些流操作更改顺序或使其无序,因此,如果流保持有序,则引用的顺序引用管道操作完成后的结果顺序。如果流操作使流无序,则元素在收集器上出现的顺序不再是一个问题。

如果您引用列表中项的顺序,则分组项被收集到的顺序是,是的,因为“元素出现的顺序”是处理元素的顺序。当分组到下游收集器时,同样的情况也是如此;如果流仍然是有序的,并且您分组到一个保持顺序的下游收集器,这将保持该顺序,而并发版本可能不会。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37251477

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档