Chcę nauczyć się używać składni Java 8 ze strumieniami i utknąłem.Grupowanie Java od jednego do wielu
Łatwo jest zgrupować, gdy masz jeden klucz dla każdej wartości. Ale co jeśli mam listę kluczy dla każdej wartości i nadal chcę je zaklasyfikować za pomocą funkcji groupingBy? Czy muszę rozbić go na kilka stwierdzeń, czy może jest trochę magii strumienia, którą można zrobić, aby była prostsza.
Jest to kod podstawowy:
List<Album> albums = new ArrayList<>();
Map<Artist, List<Album>> map = albums.stream().collect(Collectors.groupingBy(this::getArtist));
Działa świetnie, jeśli istnieje tylko jeden Wykonawca dla każdego albumu. Ale muszę zwrócić listę, ponieważ album może mieć wielu artystów. Album i Artysta są oczywiście ilustrowane, mam prawdziwe typy.
Prawdopodobnie jest to proste rozwiązanie, ale nie odnalazłem go od jakiegoś czasu, więc wzywam wspólny mózg, który reprezentuje ta strona rozwiązać. :) Kompleksowe rozwiązanie jest również mile widziane w przypadku, gdy prosty nie istnieje.
W klasie albumu lub jako metoda użytkowego biorąc albumu jako argumentu:
Artist getArtist(); // ok
List<Artist> getArtist(); // Not ok, since we now have many "keys" for every Album
Cheers, Mikael Grev
... Jest prawdopodobnie proste rozwiązanie: 'Various Artists' ;-) – mcalex