如何使用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()