繁体   English   中英

从地图列表中合并地图 java8

[英]Merge maps from a list of maps java8

您好开发人员,需要您在以下问题上的专业知识我有以下传入的地图列表

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 流的地图输出列表,如下所示-

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

感谢这里的任何帮助。

您可以使用带有合并功能的toMap()收集器。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM