Как поместить значения совпадающих ключей из двух разных мультикарт в другую мультикарту - PullRequest
1 голос
/ 25 апреля 2019

У меня есть два (скажем, map1 и map2), которые могут содержать один и тот же набор ключей, но разные значения.Для каждого соответствующего ключа в обоих я хочу поместить ключ и его соответствующие значения из обоих в третью Multimap.Я просмотрел все связанные вопросы по StackOverFlow, но ни один из них не дает конкретного решения проблемы.

Мой вопрос был помечен как дубликат Объединение двух карт в MultiMap .Мой вопрос стремятся собрать из двух разных Guava HashMultimap (не java.util.Map) в третье Guava HashMultimap.

Multimap<String, Collection<ArrayList<Double>>> combineMaps(Multimap<String, ArrayList<Double>> map1, Multimap<String, ArrayList<Double>> map2) {

    Collection<ArrayList<Double>> combinedList = new ArrayList<ArrayList<Double>>(); 
    Collection<ArrayList<Double>> list1 = new ArrayList<ArrayList<Double>>();
    Collection<ArrayList<Double>> list2 = new ArrayList<ArrayList<Double>>();

    map1.forEach((key, value) -> {
        if(map2.containsKey(key)) {
            list1 = (map1.get(key));
            list2 = (map2.get(key));
            combinedList.addAll(list1);
            combinedList.addAll(list2);
            multimap.put(key, combinedList);
        }
    });
    return multimap;
}

Например, если map1 содержит пары ключ-значение key1 = {2.0, 3.1}

keyb = {3.2, 0.8}

И map2 содержит keyz= {2.7, 1.2}

keyb = {5.9, 7.6}

key1 = {3.1, 9.4}

Объединенная карта будет содержать key1 = {2.0, 3.1, 3.1, 9.4}

keyb = {3.2, 0.8, 5.9, 7.6}

Обратите внимание, что keyz не будет сохранен в комбинированной карте, так как в map1 не встречается keyz.

...