JAVA请问如何将两个list里的元素合并成一个


例如有两组数据
第一组list:[model{ctjyl='260', inter='null', device_id='4001'}, model{ctjyl='662', inter='null', device_id='4002'}, model{ctjyl='1708', inter='null', device_id='4003'}]

第二组list:[model{ctjyl='null', inter='67', device_id='4001'}, model{ctjyl='null', inter='123', device_id='4002'}, model{ctjyl='null', inter='267', device_id='4003'}]



请问如何把第二组里面的inter的值赋给第一组ist呢
麻烦贴下代码,谢谢!

完整代码如下

        list1.forEach(m1 -> {
            Optional<model> optional = list2.stream().filter(m2->m2.getDevice_id().equals(m1.getDevice_id())).findFirst();
            if(optional.isPresent()) {
                m1.setInter(optional.get().getInter());
            }
        });

如有帮助,请采纳,十分感谢!

相同数据合并,还是直接将两个集合合并。
list.addAll(list1);

代码如下


@Test
    public void testList() {
        List<String> list1 = Arrays.asList("1","2");
        List<String> list2 = Arrays.asList("a","b");
        Collection union = CollectionUtils.union(list1, list2);
        System.out.println(union.toString());
        //
    }

img

是要按device_id进行合并字段吧,因为不知道你的数据里的对象是怎么来的,我写了一个类:

class Model{
    String ctjyl;
    String inter;
    String device_id;
    public Model(String ctjyl, String inter, String device_id){
        this.ctjyl = ctjyl;
        this.inter = inter;
        this.device_id = device_id;
    }
}

public class Demo{
    public static void main(String[] args) {
        Model[] list1 = new Model[]{new Model("260", "null", "4001"), new Model("662", "null", "4002"), new Model("1708", "null","4003")};
        Model[] list2 = new Model[]{new Model("null", "67", "4001"), new Model("null", "123", "4002"), new Model("null", "267","4003")};
        for(int i=0;i<list1.length;i++){
            for(int j=0;j<list2.length;j++){
                if(list1[i].device_id.equals(list2[j].device_id)){
                    list1[i].inter = "null".equals(list2[j].inter)?list1[i].inter:list2[j].inter;
                    list1[i].ctjyl = "null".equals(list2[j].ctjyl)?list1[i].ctjyl:list2[j].ctjyl;
                }
            }
        }
        for(int i=0;i<list1.length;i++){
            System.out.println(list1[i].device_id+","+list1[i].ctjyl+","+list1[i].inter);
        }
    }
}

img

怎么个合法

img

img

img

img

根据设备编号排好序,一对一的替换就可以了,上面给的遍历处理,会做很多无用功


//思路
        List<Model> l=new ArrayList<Model>();
        List<Model> ll=new ArrayList<Model>();        
        for (int i = 0; i < l.size(); i++) {
            l.get(i).setInter(ll.get(i).getInter());
        }

转map 然后取值赋值



   Map<String, model> map = modelList1.stream().collect(Collectors.toMap(model::getDevice_id, it -> it, (k1, k2) -> k1));
   modelList2.forEach(item ->{
              model model = map.get(item.getDevice_id());
            item.setInter(model.getInter());
  });