『Java』解決list添加同一對象覆蓋原有數(shù)據(jù)問題

這個方法不是唯一的方法,其實最簡單的方法就是我在第二個for循環(huán)里面重新new一個vmNew對象,然后通過set和get方法將vm對象的值一個一個的set到vmNew里面,但是由于我們這個vm對象里面幾十個字段,一個一個寫麻煩,而且我今天較真了,所以有了以下的方式,隨筆記錄,希望對大家有幫助?。?!?

對象vm將重新set對象值后重新add到list里面,覆蓋前面add的值,一下方法是實現(xiàn)了不覆蓋原來的值的方案,如下代碼所示:

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了對象,也會覆蓋掉,原因就是對象使用=號賦值,是將內(nèi)存的索引給了新的對象,其實內(nèi)存位置沒變,還是指向原來的對象。?

以下是我通過alibaba的JSONObject來進行對象類型轉(zhuǎn)換的方式實現(xiàn)不覆蓋原有對象內(nèi)容。

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));

}

請忽略代碼中間一些無用的代碼,那些是項目所需的業(yè)務(wù)邏輯,我懶得寫demo了,直接上工程源碼片段。

每天進步一點點,堅持帶來大改變。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容