映射具有相同值java的键

时间:2014-11-05 10:26:32

标签: java arrays algorithm map

例如, 地图 {key:value} 就像这样

A : 1

B : 2

C : 3

D : 3

如何根据地图中的值将键分为[A,B,C],[A,B,D]等列表? 因为映射值的集合是[1,2,3],因为3的键是C和D,那么将有两个映射列表。

ArrayList<Object> item1 = new ArrayList<Object>();
ArrayList<Object> repeated = new ArrayList<Object>();
Set<Object> getKeys = map.keySet();
Collection<Object> getValues = map.values();
ArrayList<Object> keyArray = new ArrayList<Object>(getKeys);
ArrayList<Object> valueArray = new ArrayList<Object>(getValues);    


for (int i=0 ; i < keyArray.size(); i++){
    int y = Collections.frequency(valueArray, valueArray.get(i));
    if (y == 1){
        item1.add(valueArray.get(i));
    }else{
        repeated.add(valueArray.get(i));
    }
}

ArrayList<ArrayList<Object>> possibleKeyCombination = new ArrayList<ArrayList<Object>>();
for (Object r : repeated){
    ArrayList<Object> table = new ArrayList<List<Object>>(item1);
    table.add(r);
    possibleKeyCombination.add(table);
} 

现在,我可以解决这个问题。但是,当映射变得复杂时,我的代码将无效。例如,

A : 1,3

B : 2

C : 3

D : 3

1 个答案:

答案 0 :(得分:0)

据我所知,没有预定义的方法可以做,你想要什么。您可以通过调用map.values()获取所有值,然后手动创建与值对应的所有键的List。之后剩下的就是计算所有可能的组合。