为什么Guava没有以下工厂调用来从普通Map创建MultiMap?
public static <K,V> MultiMap<K,V> invertMap(Map<V,K> map);
我将程序名映射到调用它们的频率的整数。我想反转这个,这样我最终可以构造一个TreeMap,按调用计数排序,然后是导致一个或多个程序名的键。
答案 0 :(得分:10)
怎么样:
public static <K,V> Multimap<K,V> invertMap(Map<V,K> map) {
return Multimaps.invertFrom(Multimaps.forMap(map), ArrayListMultimap.create());
}
似乎这不需要专用功能。你甚至可以很容易地回到TreeMap
:
Map<String, Integer> programCounts;
TreeMap<Integer, Collection<String>> map =
new TreeMap<>(
Multimaps.invertFrom(
Multimaps.forMap(programCounts),
ArrayListMultimap.create()
).asMap()
);