Java处理两个List集合中对象数据合并处理数据后为同一个List集合对象

描述:

比如一个List集合中List<对象1>,该对象1包含A、B和C列

另外一个List集合中List<对象2>,该对象2包含A、D列

问题:需要将两个List合成List<对象3>返回,该对象3包含A、B、C、D列

Java处理两个List集合中对象数据合并处理数据后为同一个List集合对象_第1张图片

解决方法1:1.需要判断出哪个List集合的数据比较少,例如第二个集合数据少,可以执行:

  Map map2 = list2.stream().collect(Collectors.toMap(User2::getUserCode,item->{
            return item;
        },(v1,v2)->(v2)));

 或者使用:

  Map map = Maps.uniqueIndex(list2, new Function() {
            @Override
            public String apply(User2 user2) {
                return user2.getUserCode();
            }
        });

之后循环遍历第一个集合,因为第一个集合数据多,防止不能展示全部执行:

 List resultList = Lists.newArrayList();
     
        for(User1 user1: list1){
            User2  user2= map.get(user1.getUserCode());
            User3 user3= new User3();
           //开始设置数据,取出user2和user1的数据分别往user3中设置
            if (Objects.nonNull(user2)){
               // 因为D列是user2的数据,单独处理   
               user3.setD(user2.getD());
            }
              // 不论user2有没有数据,user1的都是取出数据
               user3.setA(user1.getA());
               user3.setB(user1.getB());
               user3.setC(user1.getC());
              
            resultList.add(user3);
        }

解决方法2:

可以先取出第一列的用户Code放到一个set或list中,然后迭代这个用户编码取出每一个,后在两个list中过滤符合条件的该用户进行数据的封装即可。

比如

Iterator iterator = userDetail.keySet().iterator();
while(iterator .hasNext()){
    User3 user3= new User3();
    String code = iterator.next();
List user1Collect = user1List.stream().filter(e -> code.equals(e.getUserCode())).collect(Collectors.toList());
            List user2Collect = user2List.stream().filter(e -> code.equals(e.getUserCode())).collect(Collectors.toList());
User1 user1 = user1Collect .get(0);
User2 user2 = user2Collect .get(0);
user3.setUserCode(code);
user3.setB(user1.getB());
user3.setC(user1.getC());
user3.setD(user2.getD());
}

 

你可能感兴趣的:(JavaSE基础)