当一个类型是一组整数时,如何反转Map的值

时间:2015-01-12 16:33:14

标签: java dictionary

例如,如何从以下内容中反转键和值数据类型:

TreeMap<Set<Integer>, Integer>    

......进入这个:

TreeMap<Integer, Set<Integer>>

3 个答案:

答案 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 GuavaApache Commons都有。