您好,欢迎来到年旅网。
搜索
您的当前位置:首页Javalambda分组后多列求和

Javalambda分组后多列求和

来源:年旅网
Javalambda分组后多列求和

主要思路是reducing,可以像sql⼀样分组后多列求和处理成新对象等;

select code,max(name)as name,sum(chengJi)as chengJi,sum(age)as age,sum(value)as value from student group by code 将上边sql翻译成java 后为如下代码

@Data

public class Student{ public Student() { }

public Student(String code, String name, Long chengJi, Integer age, BigDecimal value) { this.code = code; this.name = name;

this.chengJi = chengJi; this.age = age; this.value = value; }

private String code; private String name; private Long chengJi; private Integer age;

private BigDecimal value;

}

@Test

public void lambda() {

List studentList = new ArrayList();

studentList.add(new Student(\"a\new BigDecimal(3))); studentList.add(new Student(\"a\new BigDecimal(3))); studentList.add(new Student(\"b\new BigDecimal(3)));

List collect = studentList.stream().collect(Collectors.groupingBy(Student::getCode, Collectors.reducing((sum, s) ->

new Student(s.code, s.name, sum.chengJi + sum.chengJi, sum.age + s.age, sum.value.add(s.value)))

)).entrySet().stream().map(c -> c.getValue().get()).collect(Collectors.toList()); System.out.println(collect); }

打印结果:

[OtherTest.Student(code=a, name=am1, chengJi=2, age=4, value=6), OtherTest.Student(code=b, name=bm1, chengJi=1, age=2, value=3)]

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- oldu.cn 版权所有 浙ICP备2024123271号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务