解决list添加同一对象覆盖原有数据问题

这个方法不是唯一的方法,其实最简单的方法就是我在第二个for循环里面重新new一个vmNew对象,然后通过set和get方法将vm对象的值一个一个的set到vmNew里面,但是由于我们这个vm对象里面几十个字段,一个一个写麻烦,而且我今天较真了,所以有了以下的方式,随笔记录,希望对大家有帮助!!! 

对象vm将重新set对象值后重新add到list里面,覆盖前面add的值,一下方法是实现了不覆盖原来的值的方案,如下代码所示:

List<JSONObject> newList = new ArrayList<JSONObject>();
if(vms!=null && vms.size()>0) {
     for(VirtualMachine vm : vms) {
          if(InitInfo.vmDiskMap.containsKey(vcIp+"_"+vm.getVmId()))  {
              List<VirtualMachineDisk> diskList =  InitInfo.vmDiskMap.get(vcIp+"_"+vm.getVmId());
              if(diskList!=null && diskList.size()>0) {
                   for(VirtualMachineDisk disk :  diskList) {
                        VirtualMachine vm1 = new VirtualMachine();
                        vm1.setLunId(disk.getLunId());
                        vm1.setLunName(disk.getStoreName());
                        vm1.setLunSize(disk.getDiskSize());
                        newList.add(vm1);
                   }
              }
          }
     }
}

以上是会覆盖原有对象的代码,即使重新new了对象,也会覆盖掉,原因就是对象使用=号赋值,是将内存的索引给了新的对象,其实内存位置没变,还是指向原来的对象。 

以下是我通过alibaba的JSONObject来进行对象类型转换的方式实现不覆盖原有对象内容。

 

List<JSONObject> newList = new ArrayList<JSONObject>();
if(vms!=null && vms.size()>0) {
     for(VirtualMachine vm : vms) {
          if(InitInfo.vmDiskMap.containsKey(vcIp+"_"+vm.getVmId()))  {
              List<VirtualMachineDisk> diskList =  InitInfo.vmDiskMap.get(vcIp+"_"+vm.getVmId());
              if(diskList!=null && diskList.size()>0) {
                   for(VirtualMachineDisk disk :  diskList) {
                        vm.setLunId(disk.getLunId());
                        vm.setLunName(disk.getStoreName());
                        vm.setLunSize(disk.getDiskSize());
                        newList.add((JSONObject)  JSONObject.toJSON(vm));
                   }
              }
          }
     }
}
List<VirtualMachine> list = new  ArrayList<VirtualMachine>();
for(JSONObject obj : newList) {
     list.add(JSONObject.toJavaObject(obj,  VirtualMachine.class));
}

请忽略代码中间一些无用的代码,那些是项目所需的业务逻辑,我懒得写demo了,直接上工程源码片段。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值