Добавление частей значения нескольких HashMap в новый - PullRequest
0 голосов
/ 18 февраля 2020

У меня есть три HashMap<String, Integer>, где некоторые ключи могут присутствовать в двух / трех картах.

Я ищу новый HashMap, который объединит все три в новый, где значение части будет простым суммированием всех значений (где ключ один и тот же).

Я сделал это с помощью метода merge(),

Map<String, Integer> combine = new HashMap<>(map1);

map2.forEach((k, v) -> combine.merge(k, v, Integer::sum));
map3.forEach((k, v) -> combine.merge(k, v, Integer::sum));

Интересно, Как я могу это сделать используя классы Stream и / или Collection?

1 Ответ

2 голосов
/ 18 февраля 2020

Я полагаю:

Map<String, Integer> combine = Stream.of(map1, map2, map3)
    .map(Map::entrySet)
    .flatMap(Set::stream)
    .collect(toMap(Entry::getKey, Entry::getValue, Math::addExact));

Это имеет то преимущество, что не модифицирует ни одну из карт. Ваш подход будет проблемой, если map1 окажется неизменяемой картой.

В общем, избегайте изменений для достижения результатов, которые не требуют этого, особенно когда такой побочный эффект является неожиданным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...