描述
日常编码过程当中,遇到的lambda应用,整理出一些笔记。
- List 转map 根据list中类型进行分组,然后返回map
(根据roominfo中的workId 进行分组,key=workId)
Map<String,List<RoomInfo>> map = list.stream()
.collect(Collectors.groupingBy(RoomInfo :: getWorkId));
- List正常转换map
key=id,value=BoBuilding格式
//实体BoBuilding id为key,实体为value
Map<String,BoBuilding> map=list.parallelStream()
.collect(Collectors.toMap(BoBuilding::getId,x->x,(o,n)->n);
//实体user中 guid为key,isDisable为value
Map<String, Integer> map = =list.parallelStream()
.collect(Collectors.toMap(User::getGuid, User::getIsDisable,(o,n)->o));
- 筛选
从list中筛选出一个对象, 在 ->之后设置筛选条件,然后findFirst,get 即
可。使用&& 来进行多条键删选
List.stream()
.filter(x -> x.getPlanDate() == LocalDateTime.parse(strDate, df)&& "男"。equals(x.getsex()))
.findFirst().get();
- 使用lambda进行筛选,如果需要判断筛选结果是否为空,需要获得Optional对象,使用isPresent 方法进行判断
Optional<BoPlanData> OptionalSigningPlanData = signingPlanDataByYearNumList.stream()
.filter(x -> boPlanData.getPlanDate().equals(x.getPlanDate()))
.findFirst();
if(OptionalSigningPlanData.isPresent() ){
BoPlanData = OptionalSigningPlanData.get();
}
//另外一种方法
BoPlanData = signingPlanDataByYearNumList.stream()
.filter(x -> boPlanData.getPlanDate().equals(x.getPlanDate()))
.findFirst().orElse(null);
if(BoPlanData != null){
//TODO
}
Stream z中Collectors.toMap参数介绍:
参数1:将对象的getPropkey作为map的key值
参数2:将对象的getPropvalue作为map的value值
参数3:当出现key值相同时,选取前面的作为value值,就是出现相同key时,后面的不覆盖前面的
参数4:默认返回的map类型为hashMap,可以自己返回不同的map实现
5、stream排序
List<DiscountGroupItemVO> oldDiscountGroupItemList = discountGroupItemList.stream()
.sorted(Comparator.comparing(DiscountGroupItemVO::getDiscountGroupItemNo).thenComparing(DiscountGroupItemVO::getVersion).reversed()).collect(Collectors.toList());
sorted方法进行排序,thenComparing是第二个排序,reversed为倒序