博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
jdk8-collect
阅读量:5303 次
发布时间:2019-06-14

本文共 2655 字,大约阅读时间需要 8 分钟。

toMap

常用方式

public Map
getIdNameMap(List
accounts) { return accounts.stream().collect(Collectors.toMap(Account::getId, Account::getUsername));}

收集成实体本身map

public Map
getIdAccountMap(List
accounts) { return accounts.stream().collect(Collectors.toMap(Account::getId, account -> account));}//account -> account是一个返回本身的lambda表达式,其实还可以使用Function接口中的一个默认方法代替,使整个方法更简洁优雅:public Map
getIdAccountMap(List
accounts) { return accounts.stream().collect(Collectors.toMap(Account::getId, Function.identity()));}

重复key

public Map
getNameAccountMap(List
accounts) { return accounts.stream().collect(Collectors.toMap(Account::getUsername, Function.identity()));}//这个方法可能报错(java.lang.IllegalStateException: Duplicate key),因为name是有可能重复的。toMap有个重载方法,可以传入一个合并的函数来解决key冲突问题:public Map
getNameAccountMap(List
accounts) { return accounts.stream().collect(Collectors.toMap(Account::getUsername, Function.identity(), (key1, key2) -> key2));}//这里只是简单的使用后者覆盖前者来解决key重复问题。

指定具体收集的map

public Map
getNameAccountMap(List
accounts) { return accounts.stream().collect(Collectors.toMap(Account::getUsername, Function.identity(), (key1, key2) -> key2, LinkedHashMap::new));}

groupingBy

普通分组

accounts.stream().collect(Collectors.groupingBy(Account::getUsername));

分组,然后取最大的值

Map
> collect = users.stream().collect(Collectors.groupingBy(Users::getAge, Collectors.maxBy(Comparator.comparing(Users::getId))));

分组,分组求和

Map
> collect = users.stream().collect(Collectors.groupingBy(Users::getName, Collectors.summingInt(User::getAge)));

分组后,把原始对象进行转换为新的对象

Map
> collect = users.stream().collect(Collectors.groupingBy(Users::getAge, Collectors.mapping( item ->{ //当然你这里也可以构建一个新的对象,进行返回 return item.getName(); }, Collectors.toList())));

终止

// 获取所有薪资大于 15000 的员工人数long count = emps.stream() .filter((x)->x.getSalary() > 15000).count();
// 获取所有薪资大于 15000 的员工人数long count = emps.stream().map(Employee::getSalary).max(Double::compare);
// 获取所有薪资大于 15000 的员工人数long count = emps.stream().min((x,y)->Double.compare(x.getSalary(), y.getSalary()));

reduce

//求集合元素只和        Integer result = stream.reduce(0, Integer::sum);
//求最大值        stream.reduce(Integer::max)
//求最小值stream.reduce(Integer::min)
//求集合元素只和        Integer result = stream.reduce(0, Integer::sum);
//求逻辑求乘机        int result2 = stream.filter(i -> i % 2 == 0).reduce(1, (i, j) -> i * j);

转载于:https://www.cnblogs.com/xckxue/p/9969073.html

你可能感兴趣的文章
机器视觉:SSD Single Shot MultiBox Detector
查看>>
201521123044 《Java程序设计》第1周学习总结
查看>>
MIT Scheme 的基本使用
查看>>
程序员的“机械同感”
查看>>
在16aspx.com上下了一个简单商品房销售系统源码,怎么修改它的默认登录名和密码...
查看>>
c++回调函数
查看>>
linux下Rtree的安装
查看>>
【Java】 剑指offer(53-2) 0到n-1中缺失的数字
查看>>
Delphi中ListView类的用法
查看>>
多米诺骨牌
查看>>
Linq 学习(1) Group & Join--网摘
查看>>
asp.net 调用前台JS调用后台,后台掉前台JS
查看>>
Attribute(特性)与AOP
查看>>
苹果手表:大方向和谷歌一样,硬件分道扬镳
查看>>
Competing Consumers Pattern (竞争消费者模式)
查看>>
Android面试收集录15 Android Bitmap压缩策略
查看>>
PHP魔术方法之__call与__callStatic方法
查看>>
ubuntu 安装后的配置
查看>>
web前端之路,js的一些好书(摘自聂微东 )
查看>>
【模板】对拍程序
查看>>