首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用Java Streams获取嵌套映射的所有键组合?

如何使用Java Streams获取嵌套映射的所有键组合?
EN

Stack Overflow用户
提问于 2018-08-15 05:36:39
回答 1查看 276关注 0票数 1

假设我有一个Map<Integer, Map<Class, String>>,如何在一个优雅(但可能很长)的Integer流声明中获得外部映射的Java键和所有映射的键的所有组合?

我的方法:

代码语言:javascript
复制
Map<Integer, Map<Class, String>> map = new HashMap<>();
map.keySet().stream()
        .map(intKey -> map.get(intKey).keySet().stream()
                .map(classKey -> new SimpleEntry(intKey, classKey)))
        .collect(Collectors.toList());

收集java.util.stream.ReferencePipeline的列表。使用

代码语言:javascript
复制
map.keySet().stream()
        .map(intKey -> map.get(intKey).keySet().stream()
                .map(classKey -> new SimpleEntry(intKey, classKey))
                .collect(Collectors.toList()))
        .collect(Collectors.toList());

我很难理解已经收集的SimpleEntry的集合。当然,这种方法可能是完全错误的。

我的问题是我根本找不到解决这个问题的方法。请注意,我不是在寻找解决办法,因为我想扩大我的理解。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-15 05:41:41

你就快到了。你只需要一个flatMap()

代码语言:javascript
复制
map.entrySet()
        .stream()
        .flatMap(e -> e.getValue()
                .keySet()
                .stream()
                .map(c -> new SimpleEntry<>(e.getKey(), c)))
        .collect(Collectors.toList())

为了好玩,这里有一个StreamEx解决方案:

代码语言:javascript
复制
EntryStream.of(map)
        .mapValues(Map::keySet)
        .flatMapValues(Set::stream)
        .toList()
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51850108

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档