student类:
public class Student {
private int id;
private String name;
private int score;
public Student(int id, String name, int score) {
this.id = id;
this.name = name;
this.score = score;
}
get...
set...
}
求统计数据:
List<Student> students = new ArrayList<>();
students.add(new Student(1,"张三",90));
students.add(new Student(1,"张三",83));
students.add(new Student(1,"张三",79));
students.add(new Student(2,"李四",60));
students.add(new Student(3,"王五",30));
students.add(new Student(3,"王五",70));
students.add(new Student(3,"王五",75));
students.add(new Student(4,"赵六",60));
students.add(new Student(4,"赵六",85));
Map<Integer, IntSummaryStatistics> collect = students.stream().collect(Collectors.groupingBy(Student::getId, Collectors.summarizingInt(Student::getScore)));
System.out.println(collect);
上面代码根据id求score的统计数据(求和,个数,平均数,最大最小值),结果如下:
{1=IntSummaryStatistics{count=3, sum=252, min=79, average=84.000000, max=90}, 2=IntSummaryStatistics{count=1, sum=60, min=60, average=60.000000, max=60}, 3=IntSummaryStatistics{count=3, sum=175, min=30, average=58.333333, max=75}, 4=IntSummaryStatistics{count=2, sum=145, min=60, average=72.500000, max=85}}
也可以只求和:
Map<Integer, Integer> collect1 = students.stream().collect(Collectors.groupingBy(Student::getId, Collectors.summingInt(Student::getScore)));
运行结果
{1=252, 2=60, 3=175, 4=145}