如何从HashMap类型的Hashmap中删除重复项<string,object =“”>?

时间:2016-01-14 03:03:55

标签: java android hashmap

我的类型为<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);
                }
            }
        }

但由于错误,我无法继续前进。你能不能帮助我做错的地方。谢谢。

2 个答案:

答案 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无法存储重复的密钥。