如何反转地图

时间:2014-03-28 10:01:07

标签: java guava

我们来一张地图:

  • A - > {1,2,3}
  • B - > {3,4,5}
  • C - > {2,3,5}

我需要撤消此地图并获取:

  • 1 - > {A}
  • 2 - > {A,C}
  • 3 - > {A,B,C}
  • 4 - > {B}
  • 5 - > {B,C}

我用这段代码实现了这个目标:

public static <U, V> Map<V, Set<U>> reverseMap(Map<U, Set<V>> map) {
  Map<V, Set<U>> result = Maps.newHashMap();
  for(Map.Entry<U, Set<V>> entry : map.entrySet()) {
    for(V value : entry.getValue()) {

      Set<U> set = result.get(value);
      if(set == null) {
        set = Sets.newHashSet();
        result.put(value, set);
      }
      set.add(entry.getKey());
      result.put(value, set);
    }

  }
  return result;
}

但这只是一个反向索引,所以我认为可能存在一个预定义的方法来执行此操作。

有人知道这样的图书馆吗?番石榴的方法?

1 个答案:

答案 0 :(得分:7)

如果您将HashMap<U, Set<V>>替换为HashMultimap<U, V>(它们相同,并且Multimap更易于使用),您现在可以使用Multimaps.invertFrom()来填充Multimap<V, U>


请注意,正如Javadoc所提到的,如果您使用ImmutableMultimap,则可以直接拨打ImmutableMultimap.inverse()