【问题标题】:How to merge/update two List<Map> into one如何将两个 List<Map> 合并/更新为一个
【发布时间】:2018-11-09 10:10:05
【问题描述】:

我有 2 个列表:

        List<Map<String, String>> data1 = new ArrayList<>();
         Map<String, String> m1 = new HashMap(){};
         m1.put("key1","value1")
         Map<String, String> m2 = new HashMap(){};
         m2.put("key2","value2")
        data1.add(m1)
        data1.add(m2)

        List<Map<String, String>> data2 = new ArrayList<>();
         Map<String, String> m22 = new HashMap(){};
         m22.put("key2","chavgedValues2")
        data2.add(m1)
        data2.add(m22)

合并后,我想要包含以下内容的列表:

"key1","value1"
"key2","chavgedValues2" 

将这两个列表合并为一个的最佳方法是什么?就像我可以实现迭代器等一样,但我认为应该有一个更简单的选项,比如流。 还应该有一个条件,如果来自 data1 的 Entry.Key 等于来自 data2 的 Entry.Key 而不是只从数据 2 中获取映射。类似于 SQL 连接器的东西。

【问题讨论】:

  • 阅读 javadoc docs.oracle.com/javase/7/docs/api/java/util/…。默认情况下会覆盖相同的键
  • 要求不够明确,至少对我来说是这样。您能否分享两个此类列表的示例以及您希望为它们获得的结果?
  • 你有一个地图列表。您如何决定要合并哪个 data1 映射与哪个 data2 映射?通过列表索引?我将从合并两张地图开始。
  • @Mureinik 我更新了描述
  • 为什么有地图列表?如果列表的每个映射都包含唯一的键,则合并每个列表的映射,然后将值从第一个映射覆盖到第一个映射,一个?

标签: java collections java-stream


【解决方案1】:
data1.addAll(data2);

这将是最简单的方法,但是如果相同的 Key 存在于两个或多个映射中,则不能进行条件检查。

所以我会使用迭代器和循环手动完成。我看不出流函数可以让它变得更容易。

【讨论】:

    猜你喜欢
    • 2014-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-29
    • 2011-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多