Вы можете сделать это, используя flatMap
, возможно, как:
Map<String, List<Person>> finalPersonMap = personRepository.findAll().stream()
.flatMap(person -> person.getAddresses().stream()
.map(address -> new AbstractMap.SimpleEntry<>(address.getCity(), person)))
.collect(Collectors.groupingBy(Map.Entry::getKey,
Collectors.mapping(Map.Entry::getValue, Collectors.toList())));
Предполагая, что базовые модели похожи на:
static class Person {
List<Address> addresses;
List<Address> getAddresses() {
return addresses;
}
}
static class Address {
String city;
String getCity() {
return city;
}
}