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. 网站时间显示——基于Date

    网站时间显示 代码实现如下: =============css样式=================== <style> #show{ width: 460px; height: 100p ...

  2. vue+ivew使用Collapse 折叠面板把全部面板展开

    1.需求: 在使用搜索功能时候,只显示搜索到的panel并且将搜索到的含有该专家的panel展开,如图                1.html,注意黄色部分,作为每个panel的key值,要唯一 ...

  3. Tomcat小技巧

    目录 1.项目路径忽略项目名 2.配置tomcat虚拟目录 3.显示目录文件列表 4.设置URL不区分大小写 1.项目路径忽略项目名 server.xml中修改Context标签中的path属性为/ ...

  4. maven/gradle版本统一示例

    <dependencyManagement> <dependencies> <dependency> <groupId>org.springframew ...

  5. 第七章 Odoo 12开发之记录集 - 使用模型数据

    在上一篇文章中,我们概览了模型创建以及如何从模型中载入和导出数据.现在我们已有数据模型和相关数据,是时候学习如何编程与其进行交互 了.模型的 ORM(Object-Relational Mapping ...

  6. PAT甲级——A1006 Sign In and Sign Out

    At the beginning of every day, the first person who signs in the computer room will unlock the door, ...

  7. Python学习day13-函数进阶(1)

    Python学习day13-函数进阶(1) 闭包函数 闭包函数,从名字理解,闭即是关闭,也就是说把一个函数整个包起来.正规点说就是指函数内部的函数对外部作用域而非全局作用域的引用. 为函数传参的方式有 ...

  8. Win7下SQLServer访问虚拟机上的MySQL

    一.确保Win7能telnet通MySQL端口,防火墙设置可参考http://www.cnblogs.com/ShanFish/p/6519950.html二.配置系统DSN1.在Win7上安装MyS ...

  9. 不同版本springboot端点开启方法

    1.X版本与2.X区别:2.X大部分路径要加“/actuator” 端点列表(注意最后一栏Sensitive为true的端点如果不设置为false将不可访问): https://docs.spring ...

  10. 唤起qqApp

    <a href="tencent://message/?uin=xxxxxxxxxxxxxx&Site=400301.com&Menu=yes">联系客 ...