猿问

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

例子如下:

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;
}

但想要更简单的方式.

HUWWW
浏览 1247回答 6
6回答

子衿沉夜

用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

Map<String, Object> result = lists .stream() .map(Map::entrySet) .flatMap(Collection::stream) .collect(Collectors.toMap(Entry::getKey, Entry::getValue)); 从可读性上讲,还是推荐楼上的答案
随时随地看视频慕课网APP

相关分类

Java
我要回答