2016-07-05 132 views
-1

我有一個arraylist,我想刪除最後添加的productId(14和1)的重複項。我試過這個,但是出現了錯誤。從ArrayList中刪除重複項<HashMap <String,String >>

Set<String> set = new LinkedHashSet<String>(); 
for (HashMap<String, String> list: modelData.displaylist) { 
    set.addAll ((Collection<? extends String>) list); 
} 
ArrayList<String> uniqueList = new ArrayList<String>(set); 
Log.e("uniqueList", "" + uniqueList); 

輸出我只想這個。

(2 = {[email protected]} size = 4 and 7 = {[email protected]} size = 4) 

我的ArrayList低於

displaylist = {[email protected]} size = 10 
0 = {[email protected]} size = 4 
0 = {[email protected]} "spQuantity" -> "1" 
1 = {[email protected]} "prdName" -> "Aqua" 
2 = {[email protected]} "proprice" -> "20" 
3 = {[email protected]} "productId" -> "14" 

1 = {[email protected]} size = 4 
0 = {[email protected]} "spQuantity" -> "6" 
1 = {[email protected]} "prdName" -> "RailNeer" 
2 = {[email protected]} "proprice" -> "22" 
3 = {[email protected]} "productId" -> "1" 

2 = {[email protected]} size = 4 
0 = {[email protected]} "spQuantity" -> "1" 
2 = {[email protected]} "proprice" -> "20" 
1 = {[email protected]} "prdName" -> "RailNeer" 
3 = {[email protected]} "productId" -> "1" 


3 = {[email protected]} size = 4 
0 = {[email protected]} "spQuantity" -> "8" 
1 = {[email protected]} "prdName" -> "Aqua" 
2 = {[email protected]} "proprice" -> "20" 
3 = {[email protected]} "productId" -> "14" 


6 = {[email protected]} size = 4 
0 = {[email protected]} "spQuantity" -> "6" 
1 = {[email protected]} "prdName" -> "Aqua" 
2 = {[email protected]} "proprice" -> "20" 
3 = {[email protected]} "productId" -> "14" 

7 = {[email protected]} size = 4 
0 = {[email protected]} "spQuantity" -> "9" 
1 = {[email protected]} "prdName" -> "Aqua" 
2 = {[email protected]} "proprice" -> "20" 
3 = {[email protected]} "productId" -> "14" 
+3

可以更新與錯誤的問題? – valarauko

+0

@valrauko得到錯誤-java.util.HashMap不能轉換爲java.util.Collection – user5826068

+0

你有這個'HashMap list'和這個'(Collection <?extends String>)list' ...這怎麼可能有意義? – Tom

回答

0

有幾件事情,我從你的問題發現,第一件事情是,你想投的散列映射爲一個集合(不能是)。如果你想擁有一套獨特的包含HashMap,那麼你可以簡單地做:

Set<HashMap<String, String>> set = new LinkedHashSet<String>(); 
set.addAll(modelData.displaylist) 
ArrayList<String> uniqueList = new ArrayList<String>(set); 

但是請注意,設定獨特將從HashMap的實例,而不是其內容。這導致我可以注意到的第二件事。在閱讀原始清單後,似乎您有一份產品清單,每個產品都重複使用,但產品的數量和價格不同(可能價格是錯誤的)。所以我認爲你想要做的是迭代原始列表,如果該列表不存在,則將產品添加到列表中;如果產品已經存在,則更新產品數量,可以使用列表完成該列表並迭代列表要知道如果產品已經存在

ArrayList<HashMap<String,String>> uniqueList = new ArrayList(); 
for (HashMap<String, String> prod: modelData.displaylist) { 
    HashMap<String, String> foundProd = null; 
    for (HashMap<String, String> uniqueProd: uniqueList) { 
     if (uniqueProd.get("productId").equals(prod.get("productId")) { 
      foundProd = uniqueProd; 
      break; 
     } 
    } 
    if (foundProd == null) { 
     uniqueList.add(prod); 
    } else { 
     // Do something if the product already existed (maybe update qty) 
    } 
} 
Log.e("uniqueList", "" + uniqueList); 

更新

要想從列表中的最後一個元素,你可以使用相同的代碼,但(倒數第一項),通過以相反的順序列表中行走:

for (int i = modelData.displayList.size() - 1; i >= 0; i--) { 
    final HashMap<String, String> prod = (HashMap<String, String) modelData.displayList.get(i); 
    ... 
} 

或者你可以使用一個HashMap,而不是有條件接入列表上的元素,然後創建一個HashMap的值的列表:

HashMap<String, HashMap<String,String>> tempMap = new HashMap<String, String>(); 
for (HashMap<String, String> prod: modelData.displaylist) { 
    // Always override 
    tempMap.put(prod.get("productId"), prod); 
} 
ArrayList<HashMap<String,String>> uniqueList = new ArrayList(tempMap.values()); 
Log.e("uniqueList", "" + uniqueList); 
+0

非常感謝..但我得到的只是第一個插入的顯示列表。我想要最後一個插入列表 – user5826068

+0

我找出了你的更新答案,我只獲得了最後一個插入的一個產品。產品編號 – user5826068

+0

例如:在我的顯示列表中的productId 14和1.只想得到最後所有產品ID插入列表。 – user5826068

相關問題