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