java8stream操作:将集合根据元素的某个属性分组求统计数据

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}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值