Ich möchte lernen, wie man die Java-8-Syntax mit Streams benutzt und ein bisschen hängen bleibt.
Das Gruppieren ist einfach, wenn Sie für jeden Wert einen Schlüssel haben. Aber was, wenn ich eine Liste von Schlüsseln für jeden Wert habe und sie immer noch mit groupingBy kategorisieren möchte? Muss ich es in mehrere Aussagen aufteilen oder gibt es möglicherweise eine kleine Stream Magic, die getan werden kann, um es einfacher zu machen.
Dies ist der Basiscode:
%Vor%Es funktioniert großartig, wenn es nur einen Künstler für jedes Album gibt. Aber ich muss eine Liste zurückgeben, da ein Album viele Künstler haben kann. Album und Artist werden natürlich zur Veranschaulichung verwendet, ich habe Real-World-Typen ..
Es gibt wahrscheinlich eine einfache Lösung, aber ich habe es schon lange nicht mehr gefunden, also rufe ich das kollektive Gehirn an, das diese Seite repräsentiert, um es zu lösen. :) Eine komplexe Lösung ist auch willkommen, falls eine einfache nicht existiert.
In der Album-Klasse oder als eine Dienstprogrammmethode, die ein Album als Argument verwendet:
%Vor%Prost, Mikael Grev
Ich denke, Sie sind hinter Collectors.mapping, das als zweites Argument an groupingBy
übergeben werden kannVollständiges Beispiel
%Vor%Falls jemand nach einem Arbeitsbeispiel sucht, sollte das Folgende nützlich sein.
%Vor%Guavas Multimap Sie können folgenden Code haben:
Bitte beachten Sie, dass selbst wenn Sie SetMultimap<Artist, Album>
haben, dies dem gewünschten Ergebnis von Map<Artist, List<Album>>
entspricht.
Ich denke, das ist ein bisschen klarer;)
%Vor%Tags und Links java java-8 mapreduce java-stream grouping