Я хочу научиться использовать синтаксис Java 8 с потоками и немного застрял.
Достаточно легко группировать по, когда у вас есть один ключ для каждого значения. Но что, если у меня есть список ключей для каждого значения, и я все еще хочу классифицировать их с помощью groupingBy? Должен ли я разбить его на несколько операторов или, возможно, есть небольшая магия потока, которая может упростить его.
Это основной код:
List<Album> albums = new ArrayList<>();
Map<Artist, List<Album>> map = albums.stream().collect(Collectors.groupingBy(this::getArtist));
Это прекрасно работает, если для каждого альбома есть только один исполнитель. Но я должен вернуть список, так как в альбоме может быть много исполнителей. Альбом и исполнитель используются для иллюстрации, конечно, у меня есть реальные типы..
Вероятно, есть простое решение, но я давно его не находил, поэтому я призываю коллективный мозг, который представляет этот сайт, решить его. :) Также приветствуется сложное решение, если простого не существует.
В классе Album или как служебный метод, принимающий альбом в качестве аргумента:
Artist getArtist(); // ok
List<Artist> getArtist(); // Not ok, since we now have many "keys" for every Album
С уважением, Микаэль Грев