Вы можете собрать, используя groupingBy
, а затем повторно направить entrySet
в свой список.
List<Map.Entry<String, List<Person>>> families = people.stream()
.collect(Collectors.groupingBy(p -> p.familyName))
.entrySet()
.stream()
.collect(Collectors.toList());
System.out.println(families);
Если вам не нужна фамилия в качестве ключа, просто добавьте .map(e -> e.getValue())
передокончательный сбор:
List<List<Person>> families = people.stream()
.collect(Collectors.groupingBy(p -> p.familyName))
.entrySet()
.stream()
.map(e -> e.getValue())
.collect(Collectors.toList());
или просто потоковая передача values
:
List<List<Person>> families = people.stream()
.collect(Collectors.groupingBy(p -> p.familyName))
.values()
.stream()
.collect(Collectors.toList());