java中collectors.groupingby实现单字段分组,核心是传入提取分组键的function(如person::getage),支持任意类型键(string、integer等),需处理null(用objects.tostring兜底),默认hashmap无序,可指定linkedhashmap或treemap保证顺序,自定义键须重写equals和hashcode。

Java中Collectors.groupingBy实现单字段分组,核心是传入一个提取分组键的函数(Function),比如用方法引用或Lambda获取对象的某个属性值。
使用对象字段作为分组键
假设有一个Person类,按age字段分组:
List<person> people = Arrays.asList(
new Person("Alice", 25),
new Person("Bob", 30),
new Person("Charlie", 25)
);
Map<integer list>> grouped = people.stream()
.collect(Collectors.groupingBy(Person::getAge));
</integer></person>
结果:{25=[Alice, Charlie], 30=[Bob]}
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
支持基本类型和字符串字段
分组键可以是任意类型——String、Integer、Boolean、LocalDate等。例如按姓名首字母分组:
Collectors.groupingBy(p -> String.valueOf(p.getName().charAt(0)))- 按是否成年:
Collectors.groupingBy(p -> p.getAge() >= 18)
处理空值与自定义Map类型
若字段可能为null,需避免NullPointerException:
- 用
Objects.toString()兜底:Collectors.groupingBy(p -> Objects.toString(p.getDepartment(), "unknown")) - 指定返回
TreeMap(自然排序):Collectors.groupingBy(Person::getAge, TreeMap::new, Collectors.toList())
常见误区提醒
注意groupingBy默认使用HashMap,不保证顺序;如需有序结果,应显式传入LinkedHashMap::new或TreeMap::new。另外,分组键必须重写equals和hashCode(对自定义对象而言),否则可能导致分组异常。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










