2016-07-05 4 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

を下回っている、最初の事はあなたはどれができない(コレクションとしてハッシュマップをキャストしようとしているということです)。

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

をしかし、設定された一意のハッシュマップのインスタンスではなく、その内容からなることに気づく:あなたはハッシュマップの固有のセットを持ちたいなら、あなたは簡単に行うことができます。それは私が気付くことができる2番目の事につながります。元のリストを読んだら、各製品が繰り返されているが、製品の数量と価格が異なる(おそらく価格は間違いである)製品リストがあるようです。だから私はあなたがしたいことは、元のリストを繰り返し、それが存在しない場合はリストに製品を追加するか、製品が既に存在する場合には製品の数量を更新することです。リストを使用してそれを達成し、リストを反復することができます製品がすでにあるかどうかを知るためにそこ

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

ありがとうございます。しかし、displaylist.Iの最初の挿入だけを取得しています。最後の挿入リストが必要です – user5826068

+0

更新された回答を作成しました。製品ID – user5826068

+0

例えば:私のディスプレイリストproductId 14および1.最後のすべての製品ID挿入リストを取得したい。 – user5826068

関連する問題