Ich versuche, Daten von diesem Format zu transformieren:Verwenden Ströme zu Gruppe Map <Foo, List <Bar>> basierend auf Größe der Liste <Bar>
Map<Foo, List<Bar>> mapFooToBars; //start Map
Map<Integer, List<Foo>> mapListSizeToFoos //destination Map
Ich mag eine Gruppierung erstellen, die auf der Basis Größe der List<Bar>
für jeden Eintrag, so dass in meiner Ausgabe Karte würde ich eine Liste aller Foos, die 0 Bars zusammen haben, alle Foos, die 1 Bar zusammen haben, und so weiter.
Ich habe versucht, dies zu tun:
Map<Foo, List<Bar>> fooBarMap = whatever();
fooBarMap.entrySet().stream()
.collect(Collectors.groupingBy(entry -> entry.getValue().size()));
//expected Map<Integer,Entry<Foo, List<Bar>> which
//could be transformed into Map<Integer,Foo> pretty easily
Ich bin offenbar unklar, wie groupingBy funktioniert genau, wie das ist mir ein „getValue() für den Typ Object nicht definiert ist“ geben Fehler. Irgendwo entlang der Linie verliere ich die Art Informationen über entrySet, denke ich? Ich fragte mich, ob das nicht der beste Weg war. Jede Hilfe wird geschätzt!
ich diesen Fehler bin nicht immer davon ausgegangen, muss es etwas anderes passiert in Ihrem realen Code sein? –
'Map >>>' ist der richtige Typ und es kompiliert. –
zapl
groupingBy wird Einträge sammeln, nicht foos –