栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

stream的过滤使用

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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());
    }

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

【去重后】

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/684297.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号