Дублирующиеся ключи в объединенной карте игнорируются - PullRequest
0 голосов
/ 06 января 2020

Я пытался понять, почему функция двойного ключа не срабатывает при сборе карты, но не повезло. Я использую Java SE 8 [1.8.0_141].

public static void main(String[] args) {

    Map<Long, Long> ts1 = new HashMap<Long, Long>();
    Map<Long, Long> ts2 = new HashMap<Long, Long>();

    ts1.put(0L, 2L);
    ts1.put(1L, 7L);
    ts2.put(2L, 2L);
    ts2.put(2L, 3L);


    Map<Long, Long> mergedMap = Stream.of(ts1, ts2)
            .flatMap(map -> map.entrySet().stream())
            .collect(Collectors.toMap(
                    Map.Entry::getKey,
                    Map.Entry::getValue,
                    (v1, v2) -> { 
                            System.out.println("Duplicate found");
                            return v1 + v2;}
                    ));

    mergedMap.entrySet().stream().forEach(e -> System.out.println(e.getKey() + " " + e.getValue()));

}

Результат

    0 2
    1 7
    2 3

Я ожидаю

    0 2
    1 7
    2 5

1 Ответ

1 голос
/ 06 января 2020

Когда вы делаете это:

ts2.put(2L, 2L);
ts2.put(2L, 3L);

2-й put перезаписывает первый. Таким образом, карта ts2 содержит только одну запись: последняя: (2L, 3L).

Итак, нечего объединять.

...