У меня есть три карты, имеющие какое-то значение, и я хочу объединить их в одну карту.Пожалуйста, дайте мне знать, как я могу это сделать - PullRequest
0 голосов
/ 02 мая 2019

У меня есть три карты, имеющие некоторые значения, такие как:

карта 1: [high-line:[doc_count:0, by_day:[buckets:[]]], critical-line:[doc_count:0, by_day:[buckets:[]]], medium-line:[doc_count:0, by_day:[buckets:[]]], low-line:[doc_count:0, by_day:[buckets:[]]]]

карта 2: [high-line:[doc_count:0, by_day:[buckets:[]]], critical-line:[doc_count:0, by_day:[buckets:[]]], medium-line:[doc_count:0, by_day:[buckets:[]]], low-line:[doc_count:0, by_day:[buckets:[]]]]

карта 3 : [high-line:[doc_count:2, by_day:[buckets:[[key_as_string:2019-04-09T00:00:00.000+05:30, key:1554748200000, doc_count:2, countedHosts:[value:2]]]]], critical-line:[doc_count:0, by_day:[buckets:[]]], medium-line:[doc_count:9, by_day:[buckets:[[key_as_string:2019-04-09T00:00:00.000+05:30, key:1554748200000, doc_count:9, countedHosts:[value:9]]]]], low-line:[doc_count:1, by_day:[buckets:[[key_as_string:2019-04-09T00:00:00.000+05:30, key:1554748200000, doc_count:1, countedHosts:[value:1]]]]]]

Теперь я хочу объединить или добавить все эти три карты в одну карту в том же порядке.Пожалуйста, дайте мне знать, как я могу это сделать.

1 Ответ

0 голосов
/ 02 мая 2019

Надеюсь, это послужит вашей цели.

Попробуй так: Для начала давайте определим два экземпляра карты:

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())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...