У меня есть Map<A, Map<B, C>>
и я хочу получить от нее Map<B, List<C>>
с помощью потоков Java.
Я пытаюсь сделать это следующим образом:
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
ofMap.Entry<B, C>
-
collect(Collectors.groupingBy(...))
принимает функцию, которая применяется кMap.Entry<B, C>
и возвращаетB
, поэтому она собирает значенияC
вList<C>
.
Но он не компилируется, буквально:
Нестатический метод не может ссылаться на статический контекст
на Map.Entry::getKey
в последней строке.
Может ли кто-нибудь объяснить, что не так, или что такое правильный способ добиться того, чего я хочу?