主要思路是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 分组后多列求和的更多相关文章

  1. linq lambda 分组后排序

    1.lamdba分组排序foodBusinessDistrict.                        GroupBy(x => new                        ...

  2. lambda 分组后的count

    var list = stuList.GroupBy(b => b.PersonalId).Select(g => (new { personalId = g.Key, count = g ...

  3. MSSQL—按照某一列分组后取前N条记录

    以前在开发的时候遇到过一个需求,就是要按照某一列进行分组后取前几条数据,今天又有同事碰到了,帮解决了之后顺便写一篇博客记录一下. 首先先建一个基础数据表,代码如下: IF OBJECT_ID(N'Te ...

  4. Oracle分组后取某列最大值的行数据

    select * from ( select last_comment, row_number() over(partition by employeeid,roadline,stationname ...

  5. SQL数据分组后取最大值或者取前几个值(依照某一列排序)

    今日做项目的时候,项目中遇到须要将数据分组后,分组中的最大值,想了想,不知道怎么做.于是网上查了查,最终找到了思路,经过比較这个查询时眼下用时最快的,事实上还有别的方法,可是我认为我们仅仅掌握最快的方 ...

  6. java lambda表达式学习笔记

    lambda是函数式编程(FP,functional program),在java8中引入,而C#很早之前就有了.在java中lambda表达式是'->',在C#中是‘=>’. 杜甫说:射 ...

  7. java~集合分组groupby的实现

    对于数据聚合来说,分组操作是很常见的,在.net里有lambda和linq,而在java里也有lambda,现在我们来实现对一个集合进行分组. 一 准备工作,有两个类型 @Value class It ...

  8. Java Lambda表达式入门[转]

    原文链接: Start Using Java Lambda Expressions http://blog.csdn.net/renfufei/article/details/24600507 下载示 ...

  9. Java编程思想(后)

    Java编程思想(后) 持有对象 如果一个程序只包含固定数量的且其生命期都是已知的对象,那么这是一个非常简单的程序. Java中的库基本类型: List, Set, Queue和Map --- 称为集 ...

随机推荐

  1. Redis还可以做哪些事?

    在上一篇文章中,讲到了redis五大基本数据类型的使用场景,除了string,hash,list,set,zset之外,redis还提供了一些其他的数据结构(当然,严格意义上也不算数据结构),一起来看 ...

  2. java 执行shell命令及日志收集避坑指南

    有时候我们需要调用系统命令执行一些东西,可能是为了方便,也可能是没有办法必须要调用.涉及执行系统命令的东西,则就不能做跨平台了,这和java语言的初衷是相背的. 废话不多说,java如何执行shell ...

  3. Es6-Promise初识

    Promise 含义: Promise 是异步编程的一种解决方案,比传统的解决方案--回调函数和事件--更合理和更强大.它由社区最早提出和实现,ES6 将其写进了语言标准,统一了用法,原生提供了Pro ...

  4. C#练习题 if

    提示用户输入用户名,然后再提示输入密码,如果用户名是"admin"并且密码是"888888",则提示正确,否则,如果用户名不是admin还提示用户用户名不存在, ...

  5. Sql 解析XML 解决方案

      1.         1.@XML 为数据传入的XML格式 2.         root 为根目录 3.         <A>为对应需要插入的表,详见一对多或者多对多的xml格式 ...

  6. 文科妹子都会用 GitHub,你这个工科生还等什么

    在某乎上刷到一条关于 GitHub 的留言,如下: 点赞人数还不少,这说明还真有不少工科生不会用 GitHub,你看大小写都没有区分(手动狗头).所以我就想写篇文章科普下,"新手如何使用 G ...

  7. 初次使用flask

    以写的一个小的例子来记录第一次使用: from flask import Flask, render_template import json # 实例化,可视为固定格式 app = Flask(__ ...

  8. Doctrine\ORM\QueryBuilder 源码解析之 where

    背景 最近有需求实现类似于 QueryBuilder 的谓词语句,就去翻看了它的源码.先看两个例子 例子1 $qb = $em->createQueryBuilder(); $qb->se ...

  9. CVE-2020-0769逆向分析

    受影响版本: 系统 版本 Microsoft Windows 10 Windows 10 1607 Windows 10 1709 Windows 10 1803 Windows 10 1809 Wi ...

  10. Linux——CentOS 7 systemctl和防火墙firewalld命令

    一.防火墙的开启.关闭.禁用命令 (1)设置开机启用防火墙:systemctl enable firewalld.service (2)设置开机禁用防火墙:systemctl disable fire ...