
使用JDK1.8新加入的Stream的filter方法来实现按条件对集合进行过滤
使用场景:场景1:
我想得到集合里面的,所有index属性在(30,1,2,3,4,5)中的EmpVo对象。
代码如下:
Listdoctors = 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
Mapdoctors = empByClass.stream().filter(o -> DOCTORS_SORT_LIST.contains(o.getIndex())).collect(Collectors.toMap(EmpVo::getIndex, EmpVo::getCount));
场景5:
集合内重复的key值,value值实现累加,部分代码如下:
private ListgetList(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()); }
实现的效果如下:
【去重前】
【去重后】
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)