我有一张地图
siteId -> (AppName -> App)
我想迭代内部地图中的所有应用程序并创建一个新地图
(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())
);
我们需要使用流#flatMap https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html#flatMap-java.util.function.Function-提取App
来自嵌套地图。所以stream().values()
会给我们Stream<Map<AppName,App>>
现在我们需要将其转换为Stream<App>
使用平面地图:
Stream<Map<AppName,App>> -> flatMap -> Stream<App>
之后我们终于可以收集到一个新的Map<AppId,App>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)