我有 map 的 map
siteId -> (AppName -> App)
我想遍历inner map中的所有Apps,创建一个新的map of
(appId -> App)
我没有流
Map<String, App> result = new HashMap<>();
siteIdToAppNameToAppMap.forEach((siteId, map) ->
map.forEach((appName, app) ->
result.put(app.token, app)
)
);
如何使用流来实现?
最佳答案
像这样的东西怎么样?
siteIdToAppNameToAppMap.values()
.stream()
.flatMap(m -> m.values().stream())
.collect(
Collectors.toMap(App::getToken, Function.identity())
);
我们需要使用 Stream#flatMap提取 App
从嵌套 map 。所以stream().values()
会给我们Stream<Map<AppName,App>>
现在我们需要将其转换为 Stream<App>
使用平面 map :
Stream<Map<AppName,App>> -> flatMap -> Stream<App>
之后我们终于可以收集到一个新的 Map<AppId,App>
关于Java 8 流 - 如何将 map 中的所有对象提取到新 map 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49353493/