我有Map<A, Map<B, C>>
并且我想Map<B, List<C>>
使用 Java Streams 从中获得。
我尝试按如下方式进行:
public <A, B, C> Map<B, List<C>> groupsByInnerKey(Map<A, Map<B, C>> input) {
return input.values()
.stream()
.flatMap(it -> it.entrySet().stream())
.collect(Collectors.groupingBy(Map.Entry::getKey));
}
我的期望:
flatMap
给出Stream
一个Map.Entry<B, C>
collect(Collectors.groupingBy(...))
接受应用于Map.Entry<B, C>
并返回的函数B
,因此它收集C
into的值List<C>
。
但它不会编译,字面意思是:
不能从静态上下文中引用非静态方法
在Map.Entry::getKey
最后一行。
有人可以解释什么是错的或实现我想要的正确方法是什么?