我们来一张地图:
我需要撤消此地图并获取:
我用这段代码实现了这个目标:
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;
}
但这只是一个反向索引,所以我认为可能存在一个预定义的方法来执行此操作。
有人知道这样的图书馆吗?番石榴的方法?
答案 0 :(得分:7)
如果您将HashMap<U, Set<V>>
替换为HashMultimap<U, V>
(它们相同,并且Multimap
更易于使用),您现在可以使用Multimaps.invertFrom()
来填充Multimap<V, U>
。
请注意,正如Javadoc所提到的,如果您使用ImmutableMultimap
,则可以直接拨打ImmutableMultimap.inverse()
。