java8如何把list分组

java8如何把list分组

作者:Elara发布时间:2026-02-27 08:56阅读时长:10 分钟阅读次数:43
常见问答
Q
Java 8中如何根据对象的某个属性将List分组?

我有一个包含多个对象的List,想要根据对象的某个属性进行分组,该如何实现?

A

使用Collectors.groupingBy方法进行分组

Java 8引入了Stream API,可以通过Collectors.groupingBy收集器来实现按某个属性分组。例如:

Map<String, List<Person>> groupedByCity = persons.stream()
    .collect(Collectors.groupingBy(Person::getCity));

这样即可根据Person对象的getCity属性将List分成多个组。

Q
如何在Java 8中实现List分组后对每个分组进行统计?

在把List分组以后,想要统计每个组的元素数量,Java 8应该怎么操作?

A

结合groupingBy和counting实现统计

使用Collectors.groupingBy方法配合Collectors.counting可以直接得到分组后的计数。示例如下:

Map<String, Long> countByCity = persons.stream()
    .collect(Collectors.groupingBy(Person::getCity, Collectors.counting()));

该Map的键为分组属性,值为对应组的元素数量。

Q
Java 8对List分组后如何对分组内元素进行进一步处理?

分组完成后,我想对每个分组内的对象进行某些操作,有什么便捷的方法吗?

A

利用groupingBy结合downstream收集器实现

Collectors.groupingBy支持传递下游收集器,用于对分组后的元素做进一步处理。例如,将分组内元素映射到另一个属性集合:

Map<String, List<String>> namesByCity = persons.stream()
    .collect(Collectors.groupingBy(Person::getCity,
            Collectors.mapping(Person::getName, Collectors.toList())));

这种方式非常灵活,能满足各种复杂的分组后处理需求。

* 文章含AI生成内容