首页 > 社交 > 科普中国

「java8」阿里架构师:Stream对集合的处理方式你全都知道了吗?

常驻编辑 科普中国 2022-09-20 方式   阿里   数组   函数   属性   元素   对象   条件   类型   代码   操作


Oqv拜客生活常识网

集合转 Map (key 存在重复)


Oqv拜客生活常识网

当集合中 id 会存在重复时,上面那种方式会报错,此时需要指定重复时选用哪一个 valueOqv拜客生活常识网


Oqv拜客生活常识网

Map map = list.stream().collect(Collectors.toMap(ReviewerRest::getId, x -> x, (before, after) -> after));
复制代码


Oqv拜客生活常识网

集合转 Map (value 存在 null 值)


Oqv拜客生活常识网

当 value 存在 null 值时上面那种方式会报错,此时需要换一种写法Oqv拜客生活常识网


Oqv拜客生活常识网

Map map = list.stream().collect(HashMap::new, (mapItem, item) -> mapItem.put(item.getId(), item.getDate()), HashMap::putAll);
复制代码


Oqv拜客生活常识网

集合分组 转 Map


Oqv拜客生活常识网

Map> map = list.stream().collect(Collectors.groupingBy(ReviewerRest::getId));
复制代码


Oqv拜客生活常识网

集合分区 转 Map


Oqv拜客生活常识网

Map> map = list.stream().collect(Collectors.partitioningBy(r -> r.getRest() == 1));
复制代码


Oqv拜客生活常识网

集合分组个数统计


Oqv拜客生活常识网

Map map = list.stream().collect(Collectors.groupingBy(ReviewerRest::getId,Collectors.counting()));
复制代码


Oqv拜客生活常识网

集合分组转某个属性集合


Oqv拜客生活常识网

Map> map = list.stream().collect(Collectors.groupingBy(ReviewerRest::getId,Collectors.mapping(ReviewerRest::getRest,Collectors.toList())));
复制代码


Oqv拜客生活常识网

集合分组聚合查询最大元素


Oqv拜客生活常识网

Map> map = list.stream().collect(Collectors.groupingBy(ReviewerRest::getReviewerId, Collectors.maxBy(Comparator.comparing(ReviewerRest::getDate))));
复制代码


Oqv拜客生活常识网

集合分组聚合求和


Oqv拜客生活常识网

//目前只支持 int、double、long
Map map = list.stream().collect(Collectors.groupingBy(ReviewerRest::getReviewerId, Collectors.summingLong(


Oqv拜客生活常识网

java8采用stream对集合的常用操作


Oqv拜客生活常识网

User :{
	id,
	name,
	age
}


Oqv拜客生活常识网

1.对象集合的分组(有两种形式)
示例:List userList,根据id分组,可以分组成为两种格式的map
(1)MapOqv拜客生活常识网


Oqv拜客生活常识网

Map map = userList.stream().collect(Collectors.toMap(User::getId, Function.identity()));


Oqv拜客生活常识网

(2)MapOqv拜客生活常识网


Oqv拜客生活常识网

Map> = userList.stream().collect(Collectors.groupingBy(User::getId));


Oqv拜客生活常识网

2.去重操作
对List 实现去重,distinct关键字Oqv拜客生活常识网


Oqv拜客生活常识网

示例:userList= userList.stream().distinct().collect(Collectors.toList());


Oqv拜客生活常识网

3.stream的map
主要用于得到特定的结构
例如:List userList,我向得到User Id的集合Oqv拜客生活常识网


Oqv拜客生活常识网

List idList = userList.stream.map(User::getId).collect(Collectors.toList());


Oqv拜客生活常识网

4.stream的filter
主要用于数据的筛选。
例1:一个条件的筛选,删选id>5的UserOqv拜客生活常识网


Oqv拜客生活常识网

List userList = userList.stream.filter(i->i.getId()>5).collect(Collectors.toList());


Oqv拜客生活常识网

例2:两个条件的删选用&&连接就行,删选id>5年纪>10的UserOqv拜客生活常识网


Oqv拜客生活常识网

List userList = userList.stream.filter(i->i.getId()>5&&i.getAge()>10).collect(Collectors.toList());


Oqv拜客生活常识网

5.用来作循环Oqv拜客生活常识网


Oqv拜客生活常识网

userList.stream().forEach(user -> System.out.println("姓名:" + user.getName()));
 


当然也可以加个limit限制数量

相关阅读:

  • 娱乐方式有哪些(人一生要体验的60种娱乐方式)
  • 经营方式有哪些(经营市场的基本模式有哪四种)
  • 接口方式有哪些(不属于接口请求方式的是)
  • 有哪些投资方式(理财方法大全)
  • 投资方式有哪些(企业的投资方式有哪些)
  • 淘宝有哪些推广方式(淘宝店铺宣传方式)
  • 编码方式有哪些(几种编码方式的特点)
  • 送达方式有哪些(法院送达的方式有几种)
  • 地暖有哪些(新取暖方式)
  • 线下推广方式有哪些(线下宣传活动的方式)
    • 网站地图 |
    • 声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。文章内容仅供参考,不做权威认证,如若验证其真实性,请咨询相关权威专业人士。