各位开发人员,大家好,需要您的专业知识解决以下问题,我在下面收到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
您可以使用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
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。