JAVA1.8-lambda表达式日常应用

描述

日常编码过程当中,遇到的lambda应用,整理出一些笔记。
  1. List 转map 根据list中类型进行分组,然后返回map
    (根据roominfo中的workId 进行分组,key=workId)
Map<String,List<RoomInfo>> map = list.stream()
	.collect(Collectors.groupingBy(RoomInfo :: getWorkId));
  1. 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));
  1. 筛选
    从list中筛选出一个对象, 在 ->之后设置筛选条件,然后findFirst,get 即
    可。使用&& 来进行多条键删选
List.stream()
	.filter(x -> x.getPlanDate() == LocalDateTime.parse(strDate, df)&& "男"equals(x.getsex()))
	.findFirst().get();
  1. 使用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为倒序

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值