java 按列表中对象的数量对集合进行排序?

inkz8wg9  于 2023-02-21  发布在  Java
关注(0)|答案(1)|浏览(106)
Collection<List<Person>> personsByDepartment=
                persons.stream()
                        .collect(Collectors.groupingBy(Person::getDepartment))
                        .values();

我有下面的Collection,它将人员列表分组到基于他们部门的列表中。
我如何确保这个列表是sorted,这样其中人数最多的列表就排在第一位?

pkmbmrz7

pkmbmrz71#

提供一个Comparator来比较列表的大小。您可以再次对值进行流处理以进行排序:

Collection<List<Person>> personsByDepartment = persons.stream()
            .collect(Collectors.groupingBy(Person::getDepartment))
            .values()
            .stream()
            .sorted((l1, l2) -> Integer.compare(l2.size(), l1.size()))
            .collect(Collectors.toList());

**编辑:**正如Michael在评论中指出的,相同的比较器可以写成:

Comparator.<List<Person>>comparingInt(List::size).reversed()

更明显的是,顺序被颠倒了。

相关问题