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

如何使用Java流获取嵌套映射的所有键组合?,java,java-stream,Java,Java Stream,假设我有一个Map我怎么能在一个优雅(但可能很长)的Java流声明中获得外部映射的整数键和所有映射的键的所有组合,它们是外部映射的值 我的做法: Map<Integer, Map<Class, String>> map = new HashMap<>(); map.keySet().stream() .map(intKey -> map.get(intKey).keySet().stream() .map(

假设我有一个
Map
我怎么能在一个优雅(但可能很长)的Java流声明中获得外部映射的
整数
键和所有映射的键的所有组合,它们是外部映射的值

我的做法:

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());
我对已经收集的
SimpleEntry
s的集合感到困惑。当然,这种方法可能是完全错误的


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

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

map.keySet().stream()
        .map(intKey -> map.get(intKey).keySet().stream()
                .map(classKey -> new SimpleEntry(intKey, classKey))
                .collect(Collectors.toList()))
        .collect(Collectors.toList());
map.entrySet()
        .stream()
        .flatMap(e -> e.getValue()
                .keySet()
                .stream()
                .map(c -> new SimpleEntry<>(e.getKey(), c)))
        .collect(Collectors.toList())
EntryStream.of(map)
        .mapValues(Map::keySet)
        .flatMapValues(Set::stream)
        .toList()