老写法操作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。