Надеюсь, это послужит вашей цели.
Попробуй так:
Для начала давайте определим два экземпляра карты:
private static Map<String, Employee> map1 = new HashMap<>();
private static Map<String, Employee> map2 = new HashMap<>();
Класс Employee выглядит следующим образом:
public class Employee {
private Long id;
private String name;
// constructor, getters, setters
}
Во-первых, давайте создадим новую HashMap, скопировав все записи с карты1:
Map<String, Employee> map3 = new HashMap<>(map1);
Далее, давайте введем функцию merge () вместе с правилом объединения:
map3.merge(key, value, (v1, v2) -> new Employee(v1.getId(),v2.getName());
Наконец, мы будем перебирать карту2 и объединять записи в карту3:
map2.forEach(
(key, value) -> map3.merge(key, value, (v1, v2) -> new
Employee(v1.getId(),v2.getName())));
Запустим программу и распечатаем содержимое map3:
Выход:
John=Employee{id=8, name='John'}
Annie=Employee{id=22, name='Annie'}
George=Employee{id=2, name='George'}
Henry=Employee{id=1, name='Henry'}
В результате наша объединенная Карта содержит все элементы предыдущих записей HashMap. Записи с дублирующими ключами были объединены в одну запись.
Также обратите внимание, что объект Employee последней записи имеет идентификатор из map1, а значение выбрано из map2.
Это из-за правила, которое мы определили в нашей функции слияния:
(v1, v2) -> new Employee(v1.getId(), v2.getName())