如何反转地图

Arn*_*lle 3 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;
}
Run Code Online (Sandbox Code Playgroud)

但这只是一个反向索引,所以我认为可能存在一个预定义的方法来做到这一点.

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

Fra*_*eau 7

如果你用HashMap<U, Set<V>>a 替换HashMultimap<U, V>它们(它们是等价的,并且Multimap更容易使用),你现在可以使用Multimaps.invertFrom()哪个将填充a Multimap<V, U>.


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