例如,如何从以下内容中反转键和值数据类型:
TreeMap<Set<Integer>, Integer>
......进入这个:
TreeMap<Integer, Set<Integer>>
答案 0 :(得分:2)
如果你使用的是Java8,你可以这样做:
TreeMap<Set<Integer>, Integer> map = ....;
Map<Integer, Set<Integer>> result =
map.entrySet()
.stream()
.map(entry -> new AbstractMap.SimpleEntry(entry.getValue(), entry.getKey())
.collect(Collectors.toMap());
答案 1 :(得分:1)
迭代条目集并将它们反向放入新的TreeMap中。以下通用方法将反转每个地图。
public static <K, V> TreeMap<V, K> reverse(TreeMap<K, V> map) {
TreeMap<V, K> result = new TreeMap<V, K>();
for (Entry<K, V> e : map.entrySet())
result.put(e.getValue(), e.getKey());
return result;
}
重要强>
如果某个值出现两次,您将丢失具有最小值的键。
示例:
public static void main(String[] args) {
TreeMap<Integer, Integer> map = new TreeMap<Integer, Integer>();
map.put(1, 2);
map.put(2, 2);
System.out.println(reverse(map));
}
输出:
{2=2}
元组{1,2}
丢失,因为值2多次出现!
答案 2 :(得分:0)
Map
不容易逆转,这是正确的。
反转地图可能不起作用。
在Map
中,密钥显然是唯一的,但值没有这样的约束。
我不知道你面临的问题是什么,但听起来似乎有更好的设计来解决它。
也许您应该使用BiMap
?
它本质上是一种双向映射,其中“键”和“值”都是唯一的。它允许从键和值中进行有效查找。
Java没有内置的BiMap
,但google Guava和Apache Commons都有。