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)
这不起作用.
假设列表中包含的地图中没有冲突的密钥,请尝试以下操作:
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)
一个非常简单的方法是使用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)
请注意最终替代方案中的合并功能。
| 归档时间: |
|
| 查看次数: |
3822 次 |
| 最近记录: |