groupby java_java~集合分组groupby的实现
时间: 2023-10-18 18:18:24 浏览: 87
在 Java 中,可以使用 Stream API 来实现集合分组的功能。
假设有一个 List<Student>,其中每个 Student 对象都包含一个属性 grade,表示学生所在的年级。现在需要将这个 List 按照 grade 进行分组,得到一个 Map<Integer, List<Student>>,其中键为 grade,值为对应年级的 Student 列表。
可以使用 Stream 的 collect 方法,结合 Collectors.groupingBy 静态方法来实现:
```
Map<Integer, List<Student>> map = students.stream().collect(Collectors.groupingBy(Student::getGrade));
```
其中,Student::getGrade 表示按照 Student 对象的 grade 属性进行分组。返回的 Map 对象中,键为 grade,值为对应年级的 Student 列表。
需要注意的是,如果要对分组后的结果进行进一步操作,例如对每个年级的学生人数进行统计,可以使用 Collectors.groupingBy 结合 Collectors.counting:
```
Map<Integer, Long> countMap = students.stream().collect(Collectors.groupingBy(Student::getGrade, Collectors.counting()));
```
其中,Collectors.counting() 表示对每个分组后的列表进行计数,返回的是一个 Long 类型的值。返回的 Map 对象中,键为 grade,值为对应年级的学生人数。
阅读全文