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 --- 称为集 ...
随机推荐
- Redis还可以做哪些事?
在上一篇文章中,讲到了redis五大基本数据类型的使用场景,除了string,hash,list,set,zset之外,redis还提供了一些其他的数据结构(当然,严格意义上也不算数据结构),一起来看 ...
- java 执行shell命令及日志收集避坑指南
有时候我们需要调用系统命令执行一些东西,可能是为了方便,也可能是没有办法必须要调用.涉及执行系统命令的东西,则就不能做跨平台了,这和java语言的初衷是相背的. 废话不多说,java如何执行shell ...
- Es6-Promise初识
Promise 含义: Promise 是异步编程的一种解决方案,比传统的解决方案--回调函数和事件--更合理和更强大.它由社区最早提出和实现,ES6 将其写进了语言标准,统一了用法,原生提供了Pro ...
- C#练习题 if
提示用户输入用户名,然后再提示输入密码,如果用户名是"admin"并且密码是"888888",则提示正确,否则,如果用户名不是admin还提示用户用户名不存在, ...
- Sql 解析XML 解决方案
1. 1.@XML 为数据传入的XML格式 2. root 为根目录 3. <A>为对应需要插入的表,详见一对多或者多对多的xml格式 ...
- 文科妹子都会用 GitHub,你这个工科生还等什么
在某乎上刷到一条关于 GitHub 的留言,如下: 点赞人数还不少,这说明还真有不少工科生不会用 GitHub,你看大小写都没有区分(手动狗头).所以我就想写篇文章科普下,"新手如何使用 G ...
- 初次使用flask
以写的一个小的例子来记录第一次使用: from flask import Flask, render_template import json # 实例化,可视为固定格式 app = Flask(__ ...
- Doctrine\ORM\QueryBuilder 源码解析之 where
背景 最近有需求实现类似于 QueryBuilder 的谓词语句,就去翻看了它的源码.先看两个例子 例子1 $qb = $em->createQueryBuilder(); $qb->se ...
- CVE-2020-0769逆向分析
受影响版本: 系统 版本 Microsoft Windows 10 Windows 10 1607 Windows 10 1709 Windows 10 1803 Windows 10 1809 Wi ...
- Linux——CentOS 7 systemctl和防火墙firewalld命令
一.防火墙的开启.关闭.禁用命令 (1)设置开机启用防火墙:systemctl enable firewalld.service (2)设置开机禁用防火墙:systemctl disable fire ...