为了账号安全,请及时绑定邮箱和手机立即绑定

使用Java8 合并List<Map<String,Object>>为一个Map?

使用Java8 合并List<Map<String,Object>>为一个Map?

HUWWW 2019-03-01 10:44:29
例子如下: Map<String,Object> h1 = new HashMap<>(); h1.put("12","fdsa"); h1.put("123","fdsa"); h1.put("124","fdsa"); h1.put("125","fdsa"); Map<String,Object> h2 = new HashMap<>(); h2.put("h12","fdsa"); h2.put("h123","fdsa"); h2.put("h124","fdsa"); h2.put("h125","fdsa"); Map<String,Object> h3 = new HashMap<>(); h3.put("h312","fdsa"); h3.put("h3123","fdsa"); h3.put("h3124","fdsa"); h3.put("h3125","fdsa"); List<Map<String,Object>> lists = new ArrayList<>(); lists.add(h1); lists.add(h2); lists.add(h3); 想用java 8 把lists里面的map合并成一个新的map: Map<String,Object> haNew = new HashMap<>(); // 包含了h1,h2,h3的内容 请问该如何实现,谢谢. 我自己使用下面的方式实现了一个: private Map<String,Object> megerListMap(List<Map<String,Object>> listsMap){ Map<String,Object> map = new HashMap<>(); listsMap.forEach(x->{ x.forEach((y,z)->{ map.put(y, z); }); }); return map; } 但想要更简单的方式.
查看完整描述

6 回答

?
子衿沉夜

TA贡献1828条经验 获得超3个赞

用stream的话,因为List中的元素是Map,所以首先执行flatMap把所有Map的成员放到一个流里;希望结果是Map,所以执行collect来生成最终的Map。

Map<String, Object> resultMap = lists
        .stream()
        .flatMap(map -> map.entrySet().stream())
        .collect(Collectors.toMap(e -> e.getKey(), e -> e.getValue()));
查看完整回答
反对 回复 2019-03-01
?
POPMUISE

TA贡献1765条经验 获得超5个赞

 Map<String, Object> result = lists
            .stream()
            .map(Map::entrySet)
            .flatMap(Collection::stream)
            .collect(Collectors.toMap(Entry::getKey, Entry::getValue));
            
            
 从可读性上讲,还是推荐楼上的答案
查看完整回答
反对 回复 2019-03-01
  • 6 回答
  • 0 关注
  • 1246 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信