Мне интересно, если в потоках (или сборщиках) уже реализована функция, которая сортировала списки как значения. Например. в следующих кодах приводятся полные списки лиц, отсортированные по возрасту. Первое решение имеет некоторую накладную сортировку (и выглядит немного неряшливо). Второе решение должно смотреть на каждого человека дважды, но делает работу красиво.
Первая сортировка, затем группировка в один поток:
Map<Gender, List<Person>> sortedListsByGender = (List<Person>) roster
.stream()
.sorted(Person::compareByAge)
.collect(Collectors.groupingBy(Person::getGender));
Первая группировка, затем сортировка каждого значения:
Map<Gender, List<Person>> sortedListsByGender = (List<Person>) roster
.stream()
.collect(Collectors.groupingBy(Person::getGender));
sortedListsByGender.values()
.forEach(list -> Collections.sort(list, Person::compareByAge));
Мне просто интересно, если уже что-то реализовано, что делает это за один проход, например groupingBySorted
.