【问题标题】:Duplicate keys in Merged Map ignored合并映射中的重复键被忽略
【发布时间】:2020-01-06 18:10:43
【问题描述】:

我一直在试图理解为什么在收集地图时没有触发重复键功能,但没有运气。我正在使用 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

【问题讨论】:

    标签: java merge hashmap java-stream


    【解决方案1】:

    当你这样做时:

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

    第二个put 覆盖了第一个。所以ts2 映射只包含一个条目:最后一个:(2L, 3L)

    那么,没有什么可以合并的。

    【讨论】:

    • 我的错,我一定累了:) 谢谢你的回答
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-26
    相关资源
    最近更新 更多