例如, 地图 {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
答案 0 :(得分:0)
据我所知,没有预定义的方法可以做,你想要什么。您可以通过调用map.values()获取所有值,然后手动创建与值对应的所有键的List。之后剩下的就是计算所有可能的组合。