Группировка коллекционеров по городу - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть объект person, у которого есть имя и список адресов в качестве параметров.Адрес содержит улицу, тип, город и персону. Я хочу получить карту группировки по городу.Я застрял

Это мой код до сих пор:

Map<String,List<Person>> MAP = personRepository.findAll().stream() 
         .collect(Collectors.groupingBy(person->person.getAddresses().stream()
         .map(address -> address.getCity())
         ."some kind of collector I assume"))

1 Ответ

0 голосов
/ 27 ноября 2018

Вы можете сделать это, используя 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;
    }
}
...