1、根据集合元素中的一个属性值分组

Person p1 = new Person("张三", new BigDecimal("10.0"));
Person p2 = new Person("王五", new BigDecimal("10.0"));
Person p3 = new Person("李四", new BigDecimal("10.0"));
Person p4 = new Person("李四", new BigDecimal("10.0"));
Person p5 = new Person("张三", new BigDecimal("10.0"));
List<Person> list = new ArrayList<>();
list.add(p1);
list.add(p2);
list.add(p3);
list.add(p4);
list.add(p5); Map<String, List<Person>> collect = list.stream().collect(Collectors.groupingBy(person -> person.getName()));
System.out.println(collect);
打印结果:
{李四=[{name='李四', salary=10.0}, {name='李四', salary=10.0}], 张三=[{name='张三', salary=10.0}, {name='张三', salary=10.0}], 王五=[{name='王五', salary=10.0}]}

2、分组求和

Person p1 = new Person("张三", new BigDecimal("10.0"));
Person p2 = new Person("王五", new BigDecimal("10.0"));
Person p3 = new Person("李四", new BigDecimal("10.0"));
Person p4 = new Person("李四", new BigDecimal("10.0"));
Person p5 = new Person("张三", new BigDecimal("10.0"));
List<Person> list = new ArrayList<>();
list.add(p1);
list.add(p2);
list.add(p3);
list.add(p4);
list.add(p5); Map<String, List<Person>> collect = list.stream().collect(Collectors.groupingBy(Person::getName));
List<Map<String,Object>> l = new ArrayList<>();
collect.entrySet().forEach(item->{
Map<String,Object> map = new HashMap<>();
map.put("title",item.getKey());
BigDecimal totalSalary = item.getValue().stream().map(Person::getSalary).reduce(BigDecimal.ZERO, BigDecimal::add);
map.put("totalSalary",totalSalary);
map.put("info",item.getValue());
l.add(map);
});
System.out.println(l); 打印结果:
[
{totalSalary=20.0, title=李四, info=[{name='李四', salary=10.0}, {name='李四', salary=10.0}]},
{totalSalary=20.0, title=张三, info=[{name='张三', salary=10.0}, {name='张三', salary=10.0}]},
{totalSalary=10.0, title=王五, info=[{name='王五', salary=10.0}]}
]

stream分组的更多相关文章

  1. java8学习之Stream分组与分区详解

    Stream应用: 继续举例来操练Stream,对于下面这两个集合: 需求是:将这两个集合组合起来,形成对各自人员打招呼的结果,输出的结果如: "Hi zhangsan".&quo ...

  2. Java8 Stream分组

    //根据排课id分组 Map<Integer, List<Schedule4Homework>> idSchedule4HomeworksMap = schedule4Home ...

  3. Java8-Collect收集Stream

    Collection, Collections, collect, Collector, Collectos Collection是Java集合的祖先接口. Collections是java.util ...

  4. 使用jdk8 stream 统计单词数

    在我的SpringBoot2.0不容错过的新特性 WebFlux响应式编程里面,有同学问如何使用stream统计单词数.这是个好例子,也很典型,在这里补上. 下面的例子实现了从一个文本文件读取(英文) ...

  5. 「 从0到1学习微服务SpringCloud 」08 构建消息驱动微服务的框架 Spring Cloud Stream

    系列文章(更新ing): 「 从0到1学习微服务SpringCloud 」01 一起来学呀! 「 从0到1学习微服务SpringCloud 」02 Eureka服务注册与发现 「 从0到1学习微服务S ...

  6. stream的groupby出来的map是有顺序的map

    stream分组后的map是有序map List<RedisInstanceTypeDto> typeDtoList = ModuleHelper.mapAll(redisInstance ...

  7. storm源码之storm代码结构【译】【转】

    [原]storm源码之storm代码结构[译]  说明:本文翻译自Storm在GitHub上的官方Wiki中提供的Storm代码结构描述一节Structure of the codebase,希望对正 ...

  8. 【原】storm源码之storm代码结构【译】

    说明:本文翻译自Storm在GitHub上的官方Wiki中提供的Storm代码结构描述一节Structure of the codebase,希望对正在基于Storm进行源码级学习和研究的朋友有所帮助 ...

  9. ES PES TS

    1.流媒体系统结构 ES:elemental stream 基本数据流: PES:packet elemental stream分组的基本数据流: 然后把PES打包成PS ,TS流,PS:progra ...

随机推荐

  1. UMP系统架构

  2. 小程序swiper-item内容过多显示不全的解决方案

    最近在项目遇到swiper高度不能自适应,导致swiper-item 里面的内容过多时只能显示一部分,最终解决方案:<swiper current="{{currentTab}}&qu ...

  3. python全栈开发:字符串格式化

    Python的字符串格式化有两种方式: 百分号方式.format方式百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存. 1.百分号方式 %[(name ...

  4. 跟我一起使用create-react-app脚手架搭建vw-layout解决方案

    之前也是看过大漠的vw适配Vue-cli,我自己写H5,还有使用vue做项目的时候,会搭建大漠博客中的那一套. 现在在github上面,看见了一位博主使用create-react-app也是用vw适配 ...

  5. 威胁预警|首现新型RDPMiner挖矿蠕虫 受害主机易被添加恶意账户

    近日,阿里云安全发现一种新型挖矿蠕虫RDPMiner,通过爆破Windows Server 3389端口RDP服务的方式进行挖矿木马传播,致使用户CPU占用率暴涨,机器卡顿,更被创建名为Default ...

  6. 二分图——最小覆盖poj2226

    详见进阶指南 #include<iostream> #include<cstring> #include<cstdio> using namespace std; ...

  7. import: not authorized `time' @ error/constitute.c/WriteImage/1028. import: not authorized `rospy' @ error/constitute.c/WriteImage/1028.

  8. 利用eclipse通过mybatis进行查询汉字字符时候无法显示结果,但是直接通过cmd窗口可以显示的解决方法

    将数据库配置文件中的url写成如下的形式就可以成功查询: url = "jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&quo ...

  9. VS2010-MFC(对话框:模态对话框及其弹出过程)

    转自:http://www.jizhuomi.com/software/160.html 一.模态对话框和非模态对话框 Windows对话框分为两类:模态对话框和非模态对话框. 模态对话框是这样的对话 ...

  10. Java-Druid:Druid

    ylbtech-Java-Druid:Druid Apache Druid(孵化)是一个高性能的实时分析数据库. 1.返回顶部   2.返回顶部   3.返回顶部   4.返回顶部   5.返回顶部 ...