java list分组统计
时间: 2023-09-12 18:10:45 浏览: 111
可以使用Java 8的Stream API来对List进行分组统计。假设我们有一个List<Student>,其中每个学生有一个属性grade表示年级,我们要按照年级分组并统计每个年级的学生人数,可以按照以下步骤实现:
1. 使用Collectors.groupingBy方法按照年级进行分组,返回一个Map<Integer, List<Student>>对象;
2. 使用Map.entrySet方法获取Map中的每个键值对,然后使用Stream.map方法将其转换为一个新的Map对象,其中键表示年级,值表示该年级的学生人数;
3. 使用Collectors.toMap方法将所有的新Map对象合并成一个Map对象。
代码示例如下:
```java
import java.util.*;
import java.util.stream.*;
public class Main {
public static void main(String[] args) {
List<Student> students = Arrays.asList(
new Student("Alice", 1),
new Student("Bob", 2),
new Student("Charlie", 1),
new Student("David", 3),
new Student("Eva", 2),
new Student("Frank", 3)
);
Map<Integer, Long> result = students.stream()
.collect(Collectors.groupingBy(Student::getGrade, Collectors.counting()))
.entrySet().stream()
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
System.out.println(result); // 输出 {1=2, 2=2, 3=2}
}
}
class Student {
private String name;
private int grade;
public Student(String name, int grade) {
this.name = name;
this.grade = grade;
}
public int getGrade() {
return grade;
}
}
```
在上面的代码中,我们首先使用Collectors.groupingBy方法按照年级进行分组,然后使用Collectors.counting方法统计每个组的元素个数。最后使用Collectors.toMap方法将Map.Entry对象转换为一个新的Map对象,其中键表示年级,值表示该年级的学生人数。
阅读全文