Объедините две Карты в MultiMap - PullRequest
13 голосов
/ 17 февраля 2012

Каков наилучший способ объединить две Карты в одну Guava MultiMap в Java?

Например:

  • Map1 содержит (1, a) и (2, b)
  • Map2 содержит (2, c) и (3, d)

Тогда полученная объединенная мультикарта будет содержать

  • (1, {a}), (2, {b, c}) и (3, {d})

Это мое текущее решение:

Multimap<T, K> combineMaps(Map<T, K> map1, Map<T, K> map2) {
    Multimap<T, K> multimap = new MultiMap();
    for (final Map.Entry<T, K> entry : map1.entrySet()) {
        multimap.put(entry.getKey(), entry.getValue());
    }
    for (final Map.Entry<T, K> entry : map2.entrySet()) {
        multimap.put(entry.getKey(), entry.getValue());
    }
    return multimap;
}

Ответы [ 2 ]

23 голосов
/ 17 февраля 2012

... Что это за мультикарты? Они из Гуавы или какой-то другой библиотеки?

В Гуаве вы могли бы сделать

multimap.putAll(Multimaps.forMap(map1));
multimap.putAll(Multimaps.forMap(map2));
1 голос
/ 17 февраля 2012

Ваше решение выглядит хорошо. Вы можете инициализировать так:

Multimap<T, K> multimap = new MultiMap(map1);

, а затем повторять только вторую карту, однако сложность / скорость та же.

...