java stream表达式操作List

老写法操作oldList,得到想要的newList,一般是手动实现,难免有一堆for循环,写多了就有些乏了,让人感觉不到自己搬砖水平长进,写的代码放佛一直都是小白。

最近迷恋上了stream操作List,非常装比,非常秀。感觉自己是中级程序员了呢,加工资!加工资!!加工资!!!

虽然不是很理解这写法的内涵,但是照着抄就行,得到先要的结果就ok。相当正宗的面向对象思想~[←_←😂]
补充阅读:
Java 8 Stream的性能到底如何?


展示一些操作,开始我的带秀:

list1和list2两集合比较,取出list1差异的部分(补集):

List<String> reduce1 = list1.stream().filter(item -> !list2.contains(item)).collect(toList());
Demo:

        List<String> hrIdList1 =new ArrayList<>();
        hrIdList1.add("C0014");
        hrIdList1.add("C0015");
        hrIdList1.add("C0016");

        List<String> hrIdList2 =new ArrayList<>();
        hrIdList2.add("C0016");
        hrIdList2.add("C0017");
        hrIdList2.add("C0018");

        List<String> reduce1 = hrIdList1.stream().filter(item -> !hrIdList2.contains(item)).collect(toList());

结果:
在这里插入图片描述

用strem表达式将一个对象的集合转化成另一个对象的集合,开始你的带秀装比:

public static void main(String[] args) {
        List<EhrStaffEntity> estNeedList=new ArrayList<>();

        EhrStaffEntity e=new EhrStaffEntity();
        e.setNameZh("帅比");
        e.setHrId("CWA10");
        e.setStDept(1);
        e.setStDeptName("董事长办公室");
        e.setStPosition(1);
        e.setStPositionName("董事长");

        estNeedList.add(e);

        OaScenePeopleEntity oOld=new OaScenePeopleEntity();
        oOld.setsCode("DD88");
        oOld.setsName("安防区");
        //使用stream表达式实现“将一个对象的集合转化成另一个对象的集合”,开始带秀
        //实体类中写了个该实体类的有参构造器(别忘了再加个显式无参,增强代码健壮性~)
        List<OaScenePeopleEntity> ospNeedList = estNeedList.stream()
                .map(est -> new OaScenePeopleEntity(oOld.getsCode(),oOld.getsName(),est.getHrId(),est.getNameZh(),est.getStDeptName(),est.getStDept().toString(),est.getStPositionName(),new Date()))
                .collect(Collectors.toList());

        System.out.println(ospNeedList);

    }

注意,stream的map中new 对象,不允许字段值为null,会报异常。
可以写成这样

    List<OaScenePeopleEntity> ospNeedList = estNeedList.stream()
                        .map(est -> new OaScenePeopleEntity(oaScenePeople.getsCode(), oaScenePeople.getsName(), est.getHrId()== null ? "" :est.getHrId(), est.getNameZh()== null ? "" :est.getNameZh(), est.getStDeptName()== null ? "" : est.getStDeptName(), est.getStDept()== null ? "" : est.getStDept().toString(), est.getStPositionName()== null ? "" :est.getStPositionName(), new Date()))
                        .collect(toList());

但是,我直接传个null反而不报错???
List<OaScenePeopleEntity> deleteOSP = deleteJobNumsDistinct.stream().map(est -> new OaScenePeopleEntity(est,null)).collect(toList());

用stream,要小心,项目里加一堆非空判断,并且传进去的对象得“实际上”是final。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值