开发者社区> 问答> 正文

合并map列表Java8中的map

各位开发人员,大家好,需要您的专业知识解决以下问题,我在下面收到map列表

Map<String, Object> m1 = new HashMap<String, Object>();
    m1.put("name", "alex");
    m1.put("age", "40");
    l1.add(m1);
    m1 = new HashMap<String, Object>();
    m1.put("name", "alex");
    m1.put("state", "Texas");
    l1.add(m1);

    m1 = new HashMap<String, Object>();
    m1.put("name", "alice");
    m1.put("age", "35");
    l1.add(m1);
    m1 = new HashMap<String, Object>();
    m1.put("name", "alice");
    m1.put("state", "Arizona");
    l1.add(m1);

    m1 = new HashMap<String, Object>();
    m1.put("name", "bob");
    m1.put("age", "25");
    l1.add(m1);
    m1 = new HashMap<String, Object>();
    m1.put("name", "bob");
    m1.put("state", "Utah");
    l1.add(m1);

我想要使​​用Java 8 Streams的map的输出列表如下-

[{name="alex", age="40", state="Texas"}
{name="alice", age="35", state="Arizona"}
{name="bob", age="25", state="Utah"}]

在这里感谢任何帮助。

问题来源:Stack Overflow

展开
收起
montos 2020-03-23 20:44:08 415 0
1 条回答
写回答
取消 提交回答
  • 您可以使用toMap()具有合并功能的收集器。

    l1.stream()
       .collect(Collectors.toMap(m -> m.get("name").toString(), Function.identity(),
                   (map1, map2) -> { map1.putAll(map2); return map1;})
               )
       .values();
    

    实际上,在此解决方案中,我们根据名称键值合并map。因此,如果两个map的名称键值相同,则它们将合并。因为toMap()收集器的结果在Map<String,Map<String,Object>>这里,期望结果在这里,Map<String,Object>所以我们已经调用了values()

    回答来源:Stack Overflow

    2020-03-23 20:44:48
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载