Java lambda 分组后多列求和
主要思路是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<Student> studentList = new ArrayList();
studentList.add(new Student("a","am",1L,2,new BigDecimal(3)));
studentList.add(new Student("a","am1",1L,2,new BigDecimal(3)));
studentList.add(new Student("b","bm1",1L,2,new BigDecimal(3)));
List<Student> 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)]
Java lambda 分组后多列求和的更多相关文章
- linq lambda 分组后排序
1.lamdba分组排序foodBusinessDistrict. GroupBy(x => new ...
- lambda 分组后的count
var list = stuList.GroupBy(b => b.PersonalId).Select(g => (new { personalId = g.Key, count = g ...
- MSSQL—按照某一列分组后取前N条记录
以前在开发的时候遇到过一个需求,就是要按照某一列进行分组后取前几条数据,今天又有同事碰到了,帮解决了之后顺便写一篇博客记录一下. 首先先建一个基础数据表,代码如下: IF OBJECT_ID(N'Te ...
- Oracle分组后取某列最大值的行数据
select * from ( select last_comment, row_number() over(partition by employeeid,roadline,stationname ...
- SQL数据分组后取最大值或者取前几个值(依照某一列排序)
今日做项目的时候,项目中遇到须要将数据分组后,分组中的最大值,想了想,不知道怎么做.于是网上查了查,最终找到了思路,经过比較这个查询时眼下用时最快的,事实上还有别的方法,可是我认为我们仅仅掌握最快的方 ...
- java lambda表达式学习笔记
lambda是函数式编程(FP,functional program),在java8中引入,而C#很早之前就有了.在java中lambda表达式是'->',在C#中是‘=>’. 杜甫说:射 ...
- java~集合分组groupby的实现
对于数据聚合来说,分组操作是很常见的,在.net里有lambda和linq,而在java里也有lambda,现在我们来实现对一个集合进行分组. 一 准备工作,有两个类型 @Value class It ...
- Java Lambda表达式入门[转]
原文链接: Start Using Java Lambda Expressions http://blog.csdn.net/renfufei/article/details/24600507 下载示 ...
- Java编程思想(后)
Java编程思想(后) 持有对象 如果一个程序只包含固定数量的且其生命期都是已知的对象,那么这是一个非常简单的程序. Java中的库基本类型: List, Set, Queue和Map --- 称为集 ...
随机推荐
- Java学习的第五十四天
1.例13.1二次函数的解 import java.util.Scanner; public class Cjava { public static void main(String[]args) { ...
- Maven打包过程
1.安装maven 下载地址:http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.1/binaries/apache-maven- ...
- redhat 7.4从openssh7.6离线升级openssh8.4p1解决方法
具体需求 这几天生产环境服务器又进行了安全扫描,每次都会报一下漏洞错误.虽然只有一个高危问题,但是每次看到ssh远程漏洞都很烧脑 "主要是里面坑太多了",闲话就不说了,今天我们来看 ...
- Docker(2)- Centos 7.x 下安装 Docker
如果你还想从头学起 Docker,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1870863.html 前言 虚拟机安装 centos ...
- 重拾python所要知道的一些主干知识点
前言:因为有一段时间没有用python了,最近需要用到,只能回头过去看B站视频补一补,因为语言都是相通的,而且一些细节都可以去查表解决,所以呢,我们只需要知道一些python与其他语言的不同和常见的优 ...
- apache+php安装
https://codebriefly.com/how-to-setup-apache-php-mysql-on-windows-10/ 出问题的地方 1.apache rewrite 模块开启 (去 ...
- DateUtil-1
/** * @Title: DateUtil.java * @Package com.jd.big.data.dao.dashboard.util * @Description: 日期工具 * @au ...
- Socket shutdown close简要分析
shutdown 系统调用关闭连接的读数据通道 写数据通道 或者 读写数据通道: 关闭读通道:丢弃socket fd 读数据以及调用shutdown 后到达的数据: 关闭写通道:不同协议处理不同:t ...
- spring boot 视频截图
- kali 系列学习03 - 主动扫描
主动扫描首先考虑使用代理IP保护自己,其次掌握 Nmap 工具使用 第一部分 扫描对方时,最好隐藏一下自己root@kali:/etc# service tor statusUnit tor.serv ...