stream的过滤使用

stream的过滤使用,第1张

stream的过滤使用 前言:

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

使用场景

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

 List 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:
求所有index属性等于1的EmpVo对象的某个属性的和,可以使用如下代码:

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

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

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

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

private List getList(List empLists) {
        List 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());
    }

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

【去重后】

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5684847.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-17
下一篇2022-12-17

发表评论

登录后才能评论

评论列表(0条)

    保存