1. 对比两List集合数据某些字段一样的情况下取值:
一般简单方式我们会使用双重for循环来处理判断数据取值(如下代码所示),但是数据量越大的情况下代码效率则越低,并且现在很多公司都会限制for循环层数所以更推荐stream将List转换为Map通过key取值
普通方式:
for (DashboardsDO aDo : dashboardsDOS) {for (Target target : targetList) {if (aDo.getStoreCode().equals(target.getStoreCode())) {代码逻辑等等}}}
stream:
List<Student> list1= new ArrayList<>();List<StudentMSG> list2= new ArrayList<>();// 假设以上两个list都有数据我们通过学生姓名name与学号num进行取值Map<String, StudentMSG> studentMap=list2.stream()
.collect(Collectors.toMap(studentMSG-> studentMSG.getName() + "_" + studentMSG.getNum(), Function.identity()));// 此时我们将name与num作为map的key,值为当前实体类list1 = list1.stream().map(student-> {// 将list1的name与num作为keyString key = student.getName() + "_" + student.getNum();// 通过key取值 StudentMSG studentMSG = studentMap.get(key);// 你的业务逻辑 return student;}).collect(Collectors.toList());