我有一个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 )
答案 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);