Guava:通过反转Map构建Multimap

Fab*_*ndl 2 java collections map multimap guava

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

public static <K,V> MultiMap<K,V> invertMap(Map<V,K> map);
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ers 10

怎么样:

public static <K,V> Multimap<K,V> invertMap(Map<V,K> map) {
    return Multimaps.invertFrom(Multimaps.forMap(map), ArrayListMultimap.create());
}
Run Code Online (Sandbox Code Playgroud)

似乎这不需要专用功能.你甚至可以TreeMap很容易地回到原点:

Map<String, Integer> programCounts;
TreeMap<Integer, Collection<String>> map = 
    new TreeMap<>(
        Multimaps.invertFrom(
           Multimaps.forMap(programCounts),
           ArrayListMultimap.create()
        ).asMap()
    );
Run Code Online (Sandbox Code Playgroud)