2011-03-20 92 views
1

比如我有兩個列表讓列表newList和列表oldList,列表(ArrayList的)比較

  • 1)newRec - >通過尋找所有對象生成對象(newRec)的列表newList參數不在oldList參數中。

  • 2)newUpdate & &

  • 3)oldUpdate - >生成( 「newUpdate」)和( 「oldUpdate」)對象通過發現存在於兩個,所述newList所有對象更新的列表和oldList參數,但具有不同的描述(xxx不匹配)。

  • 4)oldRec - >通過查找oldList參數中不在newList參數中的所有對象,將對象列表構建到(oldRec)。

所以最後我會送四個列表,它是newRec,newUpdate,oldUpdate,oldRec ....

好心幫我.. 在此先感謝

請參考我的方法。 。

public Response maintainFieldDescriptions(List<BarcodeFieldDesc> newDescList, 
     List<BarcodeFieldDesc> oldDescList) 
    { 

     try 
     { 
     List<BarcodeFieldDesc> writes = new ArrayList<BarcodeFieldDesc>(); 
     List<BarcodeFieldDesc> updatesNew = new ArrayList<BarcodeFieldDesc>(); 
     List<BarcodeFieldDesc> updatesOld = new ArrayList<BarcodeFieldDesc>(); 
     List<BarcodeFieldDesc> deletes = new ArrayList<BarcodeFieldDesc>(); 

     if (newDescList != null && newDescList.size() > 0) 
     { 

      for (int i = 0; i < newDescList.size(); i++) 
      { 
       BarcodeFieldDesc temp = newDescList.get(i); 
       boolean handled = false; 

       if (oldDescList != null && oldDescList.size() > 0) 
       { 
        for (int j = 0; j < oldDescList.size(); j++) 
        { 
        BarcodeFieldDesc temp2 = oldDescList.get(j); 
        if (temp.getKey().equals(temp2.getKey())) 
        { 
         handled = true; 
         // Keys match 
         if (!temp.toString().equals(temp2.toString())) 
         { 
          // Difference found 
          updatesNew.add(temp); 
          updatesOld.add(temp2); 
         } 
        } 
        else 
        { 
         // Keys do not match 
        } 
        } 

       } 
       if (!handled) 
       { 
        writes.add(temp); 
       } 
      } 

     } 

     if (oldDescList != null && oldDescList.size() > 0) 
     { 
      for (int i = 0; i < oldDescList.size(); i++) 
      { 
       BarcodeFieldDesc temp = oldDescList.get(i); 
       boolean handled = false; 
       for (int j = 0; j < newDescList.size(); j++) 
       { 
        BarcodeFieldDesc temp2 = newDescList.get(j); 
        if (temp.getKey().equals(temp2.getKey())) 
        { 
        handled = true; 
        } 
        else 
        { 
        // Keys do not match 
        } 
       } 
       if (!handled) 
       { 
        deletes.add(temp); 
       } 
      } 
     } 

public String getKey() 
     { 
      String result = ""; 
      result = result + StringUtil.pad(getFDPART(), 3, ' ', 'L'); 
      result = result + StringUtil.pad(getFDPROF(), 10, ' ', 'L'); 
      result = result + StringUtil.pad(getFDOTFT(), 20, ' ', 'L'); 
      result = result + StringUtil.pad(getFDLNGC(), 2, ' ', 'L'); 
      return result; 
     } 

    public String toString() 
    { 
     String result = ""; 
     result = result + StringUtil.pad(getFDPART(), 3, ' ', 'L'); 
     result = result + StringUtil.pad(getFDPROF(), 10, ' ', 'L'); 
     result = result + StringUtil.pad(getFDOTFT(), 20, ' ', 'L'); 
     result = result + StringUtil.pad(getFDLNGC(), 2, ' ', 'L'); 
     result = result + StringUtil.pad(getFDDESC(), 32, ' ', 'L'); 
     return result; 
    } 

這在BarcodeFieldDesc類..

所以在這裏,如果newList和OldList有元素,那麼它不創造newUpdate和oldUpdate名單..

+0

你爲什麼不告訴我們什麼樣的代碼你已經嘗試了這個家庭作業問題,也許我們可以告訴你你出錯的地方。 – tster 2011-03-20 12:27:50

+1

那麼到目前爲止你做了什麼?你卡在哪裏,問題是什麼? – Howard 2011-03-20 12:28:13

+0

@霍華德實際上我無法構建第二個列表newUpadte和oldUpdate – vinod 2011-03-20 12:31:16

回答

1

1:

List<Object> newRec = new ArrayList<Object>(); 
for (Object obj : newList) { 
    if (! oldList.contains(obj)) { 
     newRec.add(obj); 
    } 
} 

2:

//NOTE: this assumes that 'MyObject' has an equals() implementation 
//  that ignores the 'description' field 
List<MyObject> newUpdate = new ArrayList<MyObject>(); 
List<MyObject> oldUpdate = new ArrayList<MyObject>(); 
for (MyObject obj : newList) { 
    if (oldList.contains(obj)) { 
     MyObject oldObj = oldList.get(oldList.indexOf(obj)); 
     if (! oldObj.getDescription().equals(obj.getDescription())) { 
      newUpdate.add(obj); 
      oldUpdate.add(oldObj); 
     } 
    } 
} 

3:

List<Object> oldRec = new ArrayList<Object>(); 
for (Object obj : oldList) { 
    if (! newList.contains(obj)) { 
     oldRec.add(obj); 
    } 
} 
+0

感謝您的解決方案,它工作正常.. – vinod 2011-03-20 14:09:29

1

1)newList對象列表僅

List newRec = new ArrayList(newList); 
newRec.removeAll(oldList); 

2)你是什麼意思是「不同說明「? 「描述」是您放入列表中的對象的屬性嗎?在這種情況下,只是

List newUpdate = new ArrayList(newList); 
newUpdate.removeAll(newRec); 

- >給出newList這也是oldList對象的列表。這是你想要的嗎?

如果是的話,你可以建立oldUpdate以同樣的方式(建設下一個列表後,oldRec)

3)oldList對象列表僅

List oldRec = new ArrayList(oldList); 
oldList.removeAll(newList); 

-

爲了使它工作,你需要正確實現equals()。