Java 8流 - 如何将地图中的所有对象提取到新地图? [英] Java 8 streams - How to extract all objects inside a map of maps to a new map?
本文介绍了Java 8流 - 如何将地图中的所有对象提取到新地图?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有地图地图
siteId -> (AppName -> App)
我想迭代内部地图中的所有应用并创建新地图
I want to iterate all of the Apps in the inner map and create a new map of
(appId -> App)
我没有流这样做
Map<String, App> result = new HashMap<>();
siteIdToAppNameToAppMap.forEach((siteId, map) ->
map.forEach((appName, app) ->
result.put(app.token, app)
)
);
如何使用流进行此操作?
How do I do it with stream?
推荐答案
这样的事情怎么样?
siteIdToAppNameToAppMap.values()
.stream()
.flatMap(m -> m.values().stream())
.collect(
Collectors.toMap(App::getToken, Function.identity())
);
我们需要使用 Stream#flatMap 提取来自嵌套地图的App
。所以 stream()。values()
会给我们 Stream< Map< AppName,App>>
现在我们需要使用flatMap将其转换为 Stream< App>
:
We will need to use Stream#flatMap to extract App
from nested map. So stream().values()
will give us Stream<Map<AppName,App>>
now we need to transform it into Stream<App>
using flatMap:
Stream<Map<AppName,App>> -> flatMap -> Stream<App>
之后我们终于可以收集到新的 Map< AppId,App> ;
and after is we can finally collect to a new Map<AppId,App>
这篇关于Java 8流 - 如何将地图中的所有对象提取到新地图?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文