Java 8流 - 如何将地图中的所有对象提取到新地图? [英] Java 8 streams - How to extract all objects inside a map of maps to a new map?

查看:194
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆