我的类型为<String, Object>
的haspmap。此hashmap包含重复条目。我尝试使用以下方法删除重复项。但它显示错误。请查找代码和错误,如下所示。
这是包含数据的原始hashmap。
Map<String , Object> map = new HashMap<String , Object>();
我试图将值添加到集合中。
Set<String> valueSet = new HashSet<String>(map.values());
在map.values()
中显示错误,说明无法解析构造函数hashset(java.util.collection)
在此之后,我添加以下代码以消除重复项。
Iterator<String> it = valueSet.iterator();
Map<Integer , String> uniqueMap = new HashMap<Integer , String>();
while(it.hasNext()){
String value = it.next();
for(Entry<Integer , String> e : map.entrySet()){
if(value.equals(e.getValue()) && !uniqueMap.containsValue(value)){
uniqueMap.put(e.getKey(), value);
}
}
}
但由于错误,我无法继续前进。你能不能帮助我做错的地方。谢谢。
答案 0 :(得分:5)
此:
Map<String , Object> map = new HashMap<String , Object>();
Set<String> valueSet = new HashSet<String>(map.values());
不起作用,因为map.values()
返回Collection<Object>
且该集合的类型为String
。
试试这个:
Map<String , Object> map = new HashMap<String , Object>();
Set<Object> valueSet = new HashSet<Object>(map.values());
或者:
Map<String , String> map = new HashMap<String , String>();
Set<String> valueSet = new HashSet<String>(map.values());
@coders响应您的评论,如果您有一个地图列表,并且您想创建一组此地图的唯一值,您可以这样做:
ArrayList<HashMap<String, Object>> mDataList = new ArrayList<HashMap<String, Object>>();
Set<Object> valueSet = new HashSet<Object>();
for(HashMap<String, Object> map : mDataList){
valuesSet.addAll(map.values());
}
答案 1 :(得分:1)
Hasmap无法存储重复的密钥。