例子如下:
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()));
POPMUISE
TA贡献1765条经验 获得超5个赞
Map<String, Object> result = lists
.stream()
.map(Map::entrySet)
.flatMap(Collection::stream)
.collect(Collectors.toMap(Entry::getKey, Entry::getValue));
从可读性上讲,还是推荐楼上的答案
添加回答
举报
0/150
提交
取消