Guava:通过反转Map构建Multimap

时间:2011-11-16 18:56:30

标签: java collections map guava multimap

为什么Guava没有以下工厂调用来从普通Map创建MultiMap?

public static <K,V> MultiMap<K,V> invertMap(Map<V,K> map);

我将程序名映射到调用它们的频率的整数。我想反转这个,这样我最终可以构造一个TreeMap,按调用计数排序,然后是导致一个或多个程序名的键。

1 个答案:

答案 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()
    );