Гуава: построить мультикарту, инвертировав карту - PullRequest
2 голосов
/ 16 ноября 2011

почему у Guava нет следующего вызова фабрики для создания MultiMap из обычной карты?

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

У меня есть имена программ, сопоставленные с целым числом того, как часто они вызывались.Я хотел бы перевернуть это, чтобы я мог в конечном итоге построить TreeMap, отсортированный по кол-ву вызовов, которые затем являются ключами, ведущими к одному или нескольким именам программ.

1 Ответ

10 голосов
/ 16 ноября 2011

Как насчет:

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()
    );
...