从ArrayList <hashmap <string,string =“”>&gt;中删除重复项

时间:2016-07-05 12:54:41

标签: android arraylist hashmap

我有一个arraylist,我想删除与最后添加的productId(14和1)相关的重复项。我试过这个但是发现了错误。

gregexpr("[[:digit:]]+\\.*[[:digit:]]*", str)[[1]]

输出我只想要这个。

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

我的arraylist在

之下
 (2 = {HashMap@4692}  size = 4 and 7 = {HashMap@4692}  size = 4 )

1 个答案:

答案 0 :(得分:0)

我从你的问题中注意到了一些事情,第一件事是你试图将哈希地图转换为集合(不可能)。如果您想拥有一组唯一的哈希图,那么您可以这样做:

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