Voglio imparare come utilizzare la sintassi di Java 8 con corsi d'acqua e ha un po 'bloccato.Java 8 raggruppamento da da uno-a-molti
E 'abbastanza facile da groupingBy quando si dispone di una chiave per ogni valore. Ma cosa succede se ho un elenco di chiavi per ogni valore e voglio comunque categorizzarle con groupingBy? Devo infrangerlo in diverse dichiarazioni o c'è forse un po 'di magia in streaming che può essere fatto per renderlo più semplice.
Questo è il codice di base:
List<Album> albums = new ArrayList<>();
Map<Artist, List<Album>> map = albums.stream().collect(Collectors.groupingBy(this::getArtist));
Funziona benissimo se v'è un solo artista per ogni album. Ma devo restituire una lista poiché un album può avere molti artisti. L'album e l'artista sono usati per l'illustrazione, naturalmente, ho dei tipi di mondo reale.
Probabilmente c'è una soluzione semplice ma non l'ho trovata da un po 'quindi sto chiamando al cervello collettivo che questo sito rappresenta per risolvilo. :) Una soluzione complessa è anche il benvenuto nel caso in cui non esista uno semplice.
In classe Album o come un metodo di utilità di prendere un album come argomento:
Artist getArtist(); // ok
List<Artist> getArtist(); // Not ok, since we now have many "keys" for every Album
Cheers, Mikael Grev
... C'è probabilmente una soluzione semplice: 'Various Artists' ;-) – mcalex