You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按列表元素数量对Collection<List<Person>>降序排序?

按分组列表元素数量降序排序的实现

你可以通过以下两种方式实现需求,让元素数量最多的部门列表排在首位:

方式一:对已有的Collection进行排序

原代码得到的Collection<List<Person>>本身不支持排序操作,需要先转换为有序的List(比如ArrayList),再通过自定义Comparator完成降序排序:

// 将无序的Collection转为ArrayList
List<List<Person>> sortedList = new ArrayList<>(personsByDepartment);
// 按列表元素数量从多到少排序
sortedList.sort(Comparator.comparingInt(List::size).reversed());

如果习惯用匿名内部类的写法,也可以这样写:

sortedList.sort((listA, listB) -> Integer.compare(listB.size(), listA.size()));

方式二:在流式处理阶段直接完成分组+排序

可以将分组、取values、排序、收集为List的步骤合并到一个流操作中,一步到位:

List<List<Person>> sortedPersonsByDepartment = persons.stream()
        .collect(Collectors.groupingBy(Person::getDepartment)) // 按部门分组
        .values() // 获取所有部门对应的人员列表
        .stream() // 转为流进行排序
        .sorted(Comparator.comparingInt(List::size).reversed()) // 按列表大小降序
        .collect(Collectors.toList()); // 收集为有序List

说明

默认情况下Collectors.groupingBy返回的是HashMap,其values()方法返回的Collection是无序的,因此必须转为有序集合(比如List)后再执行排序逻辑。排序时通过Comparator.comparingInt(List::size).reversed()实现按列表元素数量的降序排列,确保元素多的列表排在最前面。

内容的提问来源于stack exchange,提问作者java12399900

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 05:22:07