关于Jdk7与Jdk8对Collections进行分组的区别
一.功能
1、 跟据某个属性分组OfficeId:
Map<String, List<IncomeSumPojo>> collect = list.stream().collect(Collectors.groupingBy(IncomeSumPojo::getOfficeId));
2、根据某个属性分组OfficeId,汇总某个属性Money:
Map<String, Double> collect = list.stream().collect(Collectors.groupingBy(IncomeSumPojo::getOfficeId,Collectors.summingDouble(IncomeSumPojo::getMoney)));
3、根据某个属性添加条件过滤数据:
list = list.stream().filter(u -> !u.getAmount().equals("0.00")).collect(Collectors.toList());
4、判断一组对象里面有没有属性值是某个值:
List<Menu> menuList = UserUtils.getMenuList();
boolean add = menuList.stream().anyMatch(m -> "plan:ctPlan:add".equals(m.getPermission()));
5、取出一组对象的某个属性组成一个新集合:
List<String> tableNames=list.stream().map(User::getMessage).collect(Collectors.toList());
6、list去重复:
list = list.stream().distinct().collect(Collectors.toList());
二.例子
先准备一点数据:
public class User {
private Integer id;
private String type;
private String name;
private String date;
// omit setter and getter
}
User user1 = new User(1,"张三","小学", "2017-03");
User user2 = new User(2,"李四","小学", "2017-03");
User user3 = new User(3,"王五","初中", "2017-02");
User user4 = new User(4,"马六","高中", "2017-04");
User user5= new User(5,"jack","大学", "2017-04");
List<User > list = new ArrayList<>();
list.add(user1 );
list.add(user2 );
list.add(user3 );
list.add(user4 );
list.add(user5);
现在想对用户列表根据日期进行分组,得到一个map: date -> List<User>。
Java7以前也许是这样的:
List<User> userList = Arrays.asList(user1, user2, user3, user5, user4);
Map<String, List<User>> groupUserMap = Maps.newHashMap();
for (User user : userList) {
String month = user.getDate();
if (groupUserMap.containsKey(month)) {
groupUserMap.get(month).add(user);
} else {
groupUserMap.put(month, Lists.newArrayList(user));
}
}
有了Java8之后,一切很简单了:
Map<String, List<User>> groupUserMapOne =userList.stream().collect(Collectors.groupingBy(User::getDate));
如果想分组的List里是User的name呢:
Map<String, List<String>> userByDate = Stream.of(user1, user2, user3, user5, user4).collect(Collectors.groupingBy(User::getDate,
Collectors.mapping(User::getName, Collectors.toList())));
System.out.println(userByDate);
关于Jdk7与Jdk8对Collections进行分组的区别的更多相关文章
- HashMap:JDK7 与 JDK8 的实现
JDK7中的HashMap HashMap底层维护一个数组,数组中的每一项都是一个Entry: transient Entry<K,V>[] table; 我们向在HashMap 中存放的 ...
- JDK7与JDK8中HashMap的实现
JDK7中的HashMap HashMap底层维护一个数组,数组中的每一项都是一个Entry transient Entry<K,V>[] table; 我们向 HashMap 中所放置的 ...
- HashMap在JDK7和JDK8中的区别
在[深入浅出集合Map]中,已讲述了HashMap在jdk7中实现,在此就不再细说了 JDK7中的HashMap 基于链表+数组实现,底层维护一个Entry数组 Entry<K,V>[] ...
- win7 安装JDK7和JDK8后,卸载JDK8后出错
这是本人学习Java过程中遇到的一些问题和解决方法,在此记录,方便本人查看,解决他人疑惑. 本人win7 x64旗舰版,同时安装了JDK7和JDK8,卸载了JDK8之后,cmd命令行输入:java - ...
- Java内存管理-JVM内存模型以及JDK7和JDK8内存模型对比总结(三)
勿在流沙住高台,出来混迟早要还的. 做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 上一篇分享了JVM及其启动流程,今天介绍一下JVM内部的一些区域,以及具体的区域在运行 ...
- 第1篇--基于jdk7和jdk8分析 JVM的内存区域
基于jdk7和jdk8分析 JVM的内存区域 目录前言1.什么是JVM2.JRE/JDK/JVM是什么关系3.JVM执行程序的过程4. JVM的生命周期5.JVM垃圾回收一.运行时数据区的组成1.程 ...
- mac同时安装jdk7和jdk8
下载地址:http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521261.h ...
- windows同时安装jdk7和jdk8
windows同时安装jdk7和jdk8 我本地的情况是本地安装了jdk8,但是因为项目的需要,将tomcat9换成tomcat8,即jdk8换成jdk7(但是好像也可以不用换,因为 7 and la ...
- JDK7和JDK8一些重要新特性
jdk7新特性(部分) switch支持字符串 List AutoCloseable接口实现自动关闭,在try()中 新增获取环境信息的工具方法,getJavaHomeDir,getUserHomeD ...
随机推荐
- Jquery table相关--工时系统
1.jquery 的弹出对话框,单击事件之后 if (confirm("确定要删除?")) { // //点击确定后操作 } 2.对某个table中的checkbox是否被选中的遍 ...
- MySQL索引详解(优缺点,何时需要/不需要创建索引,索引及sql语句的优化)
一.什么是索引? 索引是对数据库表中的一列或多列值进行排序的一种结构,使用索引可以快速访问数据库表中的特定信息. 二.索引的作用? 索引相当于图书上的目录,可以根据目录上的页码快速找到所需的内容,提 ...
- docker中centos7安装ssh服务
来源:https://blog.csdn.net/qq_32969313/article/details/64919735 docker安装好后,自己动手做个自己的docker镜像,首先需要从服务器p ...
- 微软商店(Microsoft store)删除之后恢复,一行代码搞定
首先以管理员身份运行Windows PowerShell 地址C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\P ...
- aiomysql实现对数据库异步读取
有一个库叫做aiomysql,这是一个基于asyncio和pymysql的库.至于为什么可以在tornado中使用,是因为高版本tornado的底层使用了asyncio. import asyncio ...
- Linux进程管理工具之ps
1.PS进程管理指令 ps -aux USER:用户名称 PID:进程号 %CPU:进程占用CPU的百分比 %MEM:进程占用物理内存的百分比 VSZ:进程占用的虚拟内存大小(单位:KB) RS ...
- Winform Global exception and task parallel library exception;
static class Program { /// <summary> /// 应用程序的主入口点. /// </summary> [STAThread] static vo ...
- mysql细说show slave status参数详解(最全)
1. Slave_IO_State 这里显示了当前slave I/O线程的状态(slave连接到master的状态).状态信息和使用show processlist | grep "syst ...
- PHP设置Redis key在当天有效
本文援引自:https://blog.csdn.net/zpf_nevergiveup/article/details/81066500 $redis->set($key,$value); $e ...
- 2017 去哪儿网 研发4.18(offer)
去哪儿网一面(30分钟) 上来小哥哥先让自我介绍,然后开始问基础,说你计算机专业的,数据结构应该比较扎实吧,先写个快排.然后在我写的时候,小哥哥mac上敲敲打打,应该在看git,我简历上有留git的地 ...