使用flatMap将地图列表转换为地图

mat*_*ath 2 java java-8 flatmap

我该如何合并List<Map<String,String>>Map<String,String>使用flatMap

这是我尝试过的:

final Map<String, String> result = response
    .stream()
    .collect(Collectors.toMap(
        s -> (String) s.get("key"),
        s -> (String) s.get("value")));
result
    .entrySet()
    .forEach(e -> System.out.println(e.getKey() + " -> " + e.getValue()));
Run Code Online (Sandbox Code Playgroud)

这不起作用.

VHS*_*VHS 6

假设列表中包含的地图中没有冲突的密钥,请尝试以下操作:

Map<String, String> maps = list.stream()
    .flatMap(map -> map.entrySet().stream())
    .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
Run Code Online (Sandbox Code Playgroud)


spr*_*ter 5

一个非常简单的方法是使用putAll

Map<String, String> result = new HashMap<>();
response.forEach(result::putAll);
Run Code Online (Sandbox Code Playgroud)

如果您特别想在单个流操作中执行此操作,请使用缩减:

response.stream().reduce(HashMap<String, String>::new, Map::putAll);
Run Code Online (Sandbox Code Playgroud)

或者,如果您真的想使用flatMap

response.stream().map(Map::entrySet).flatMap(Set::stream)
    .collect(toMap(Map.Entry::getKey, Map.Entry::getValue, Map::putAll));
Run Code Online (Sandbox Code Playgroud)

请注意最终替代方案中的合并功能。