Ich habe Map<A, Map<B, C>>
und ich möchte Map<B, List<C>>
davon mit Java-Streams bekommen.Java Streams: Werte durch inneren Kartenschlüssel gruppiert
ich versuche, es zu tun, wie folgt:
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));
}
Was ich erwarte:
flatMap
eine FunktionStream
vonMap.Entry<B, C>
collect(Collectors.groupingBy(...))
nimmt gibt, dieMap.Entry<B, C>
angewendet wird, und kehrtB
, somit sammelt es Werte vonC
inList<C>
.
Aber es nicht kompiliert, wörtlich:
Nicht statische Methode kann nicht von einem statischen Kontext referenziert wird
bei Map.Entry::getKey
in der letzten Zeile.
Kann jemand erklären, was falsch ist oder was ist der richtige Weg, um das zu erreichen, was ich will?
Mögliche doppelte: http://stackoverflow.com/questions/29373026/how-to-get-all-values-from-the-inner-maps-of-a-map-using-a-common -Schlüssel –
@ShiladittyaChakraborty, nicht wirklich, ich frage, warum die erwartete Art, dies zu tun, nicht funktioniert. Außerdem unterscheidet sich die Aufgabe etwas von der Frage, auf die Sie verwiesen haben. – hotkey