Stream API的实战案例
ps:我个人比较偏向于代码与实践向结合,所以在一些专业的术语方面也有些粗糙,
以下内容仅按照我个人的理解进行解释,如有其它更全面更好解释,请直接在下面进行评论,或私聊我,我将定时去检查跟正
Stream ApI的前提条件
- 针对对象: 集合
- 后序内容按照这个下述内容进行分析
- 集合 :List uList
- 对象:User[id, nm,age,sign]
- 后序内容按照这个下述内容进行分析
StreamAPI 常用的方法
-
Stream: (个人理解)就是把一个集合转换成流对象
-
map: 集合的筛选条件,选取当前集合的那些内容
-
filter: 对集合中的内容进行一次条件判断,常和findFirst() 连用
-
findFirst(): 把集合中进行条件判断满足的内容获取处理,后序可以进一步筛选(map)
-
reduce: BigDecimal 数字的运算
更多待续~
后序添加—list.stream().map(Dto -> Dto.getXXXXVo().getXXX()).reduce(BigDecimal::add).get();
常用的流使用方法
- 把一个List<对象> 从中取出特定的一些内容,返回一个新的list
* 筛选User的id
uList.stream.map(User::User.getId()).collect(Collectors.toList());
或 uList.stream.map(User->User.getId()).collect(Collectors.toList());
- 把一个List<对象> 并按照一定规则选取,返回一个新的list
* 筛选User的age >18的Age集合
uList.stream.filter(U->{return U.getAge()>18 }).collect(Collectors.toList());
- 把一个List<对象> 从中取出特定的一些内容, 并按照一定规则选取,并赋值,返回一个新的list
* 筛选User的标记sign赋值为true
uList.stream.map(User->{
User.setSign(true);
return User;
}).collect(Collectors.toList());
- 把一个List<对象> 从中取出特定的一些内容, 并按照一定规则选取,并赋值,返回一个Map
1、指定key-value,value是对象中的某个属性值。
Map<Integer,String> userMap1 = userList.stream().collect(Collectors.toMap(User::getId,User::getName));
2、指定key-value,value是对象本身,User->User 是一个返回本身的lambda表达式
Map<Integer,User> userMap2 = userList.stream().collect(Collectors.toMap(User::getId,User->User));
3、指定key-value,value是对象本身,Function.identity()是简洁写法,也是返回对象本身
Map<Integer,User> userMap3 = userList.stream().collect(Collectors.toMap(User::getId, Function.identity()));
4、指定key-value,value是对象本身,Function.identity()是简洁写法,也是返回对象本身,key 冲突的解决办法,这里选择第二个key覆盖第一个key。
Map<Integer,User> userMap4 = userList.stream().collect(Collectors.toMap(User::getId, Function.identity(),(key1,key2)->key2));
————————————————
版权声明:本内容摘自为CSDN博主「﹏半生如梦愿梦如真て」的原创文章,
遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lspj201007186/java/article/details/91039052
- 把两个List<对象>从中取出特定的一些内容, 并按照一定规则选取,
并把第二个集合中的内容赋值给第一个,返回一个新的集合 - 新的集合List listNew
- 新的对象User1[id, nm,age,sign]
uList.stream().map( item -> listNew.stream()
.filter(newList->newList.getUserId().equals(XXX) && ( newList.getSign.equals(true) )
.findFirst() //把满足filter的集合获取到
.map(newList-> {
// ....按内容填充...
item.setUser(new User());item.setId(newList.getId()) return item;
})
).collect(Collectors.toList());