Я бы рекомендовал использовать Map
вместо вложенных списков.Вы можете использовать Java Streams для достижения этого:
Map<Character, List<MusicTrack>> titles = tracks.stream()
.collect(Collectors.groupingBy(track -> Character.toUpperCase(track.getTitle().charAt(0))));
Если вы хотите, чтобы карта сортировалась по ключу, вы можете использовать TreeMap
для этого:
Map<Character, List<MusicTrack>> titles = tracks.stream()
.collect(Collectors.groupingBy(track -> Character.toUpperCase(track.getTitle().charAt(0)), TreeMap::new, Collectors.toList()));
Наконец, если выдействительно нужно использовать вложенные списки, вы также можете снова преобразовать карту, используя Map.values()
:
List<List<MusicTrack>> titles = new ArrayList<>(tracks.stream()
.collect(Collectors.groupingBy(track -> Character.toUpperCase(track.getTitle().charAt(0)), TreeMap::new, Collectors.toList()))
.values());