stream的过滤使用

前言:

使用JDK1.8新加入的Stream的filter方法来实现按条件对集合进行过滤

使用场景:

场景1:
我想得到集合里面的,所有index属性在(30,1,2,3,4,5)中的EmpVo对象。
代码如下:

 List<EmpVo> doctors = empByClass.stream().filter(o ->  
 Arrays.asList(30,1,2,3,4,5).contains(o.getIndex())).collect(Collectors.toList());

场景2:
我想得到集合里面的,所有index属性等于1的EmpVo对象的个数。

 Long doctorSum = empLists.stream().filter(
     emp -> 1== emp.getIndex()).collect(Collectors.toList()).stream().count();

场景3:
我想集合取出某个字段的集合

 List<Integer> groups = list.stream().map(OrgImGroupUser::getOigUid).collect(Collectors.toList());

场景4:
求所有index属性等于1的EmpVo对象的某个属性的和,可以使用如下代码:

 Double doctorSum = empLists.stream().filter(
	emp -> 1== emp.getIndex())
	.collect(Collectors.toList()).stream().mapToDouble(EmpVo::getCount).sum();

场景5:
将符合要求的集合转为map

Map<Integer, Integer> doctors = empByClass.stream().filter(o -> 
DOCTORS_SORT_LIST.contains(o.getIndex())).collect(Collectors.toMap(EmpVo::getIndex, 
EmpVo::getCount));

场景6:
集合内重复的key值,value值实现累加,部分代码如下:

private List<EmpPerson> getList(List<EmpVo> empLists) {
        List<EmpPerson> empVoList = new ArrayList<>();
        empLists.forEach(e -> {
            EmpPerson p = new EmpPerson();
            p.setArea(e.getName());
            if (e.getIndex() == DOCTOR_INDEX) {
                p.setDoctorNumber(e.getCount());
            } else {
                p.setNurseNumber(e.getCount());
            }
            empVoList.add(p);
        });

        return new ArrayList<>(empVoList.stream().collect(Collectors.toMap(EmpPerson::getArea, a -> a, (o1, o2) -> {
            o1.setNurseNumber(o1.getNurseNumber() + o2.getNurseNumber());
            o1.setDoctorNumber(o1.getDoctorNumber() + o2.getDoctorNumber());
            return o1;
        })).values());
    }

实现的效果如下:
【去重前】
去重前
【去重后】
去重后

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值