例如有两组数据
第一组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());
//
}
是要按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);
}
}
}
怎么个合法
根据设备编号排好序,一对一的替换就可以了,上面给的遍历处理,会做很多无用功
//思路
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());
});