Невозможно отобразить поле каскадного списка с помощью Java stream()

#java #list #java-stream

Вопрос:

У меня есть List<Country> , и это есть List<City> . Я хочу получить UUID список всех городов в списке стран с помощью Java stream(), но я не могу их правильно отобразить. Обычно я мог бы получить UUID поле списка, но есть каскадный список, и я не могу найти для этого правильное решение. Итак, как я могу решить эту проблему? Должен ли я использовать flatMap ?

 List<UUID> cityUUIDList = countryList.stream().map(CityDTO::getUuid)
    .collect(Collectors.toList());
 

Комментарии:

1. countryList.stream().flatMap(c -> c.getCities().stream()).map(City::getUuid).collect(Collectors.toList());

Ответ №1:

Вы также можете получить список UUID , подобный этому:

 List<UUID> cityUUIDList = countryList.stream()
        .map(Country::getCities)
        .flatMap(List::stream)
        .map(CityDTO:::getUuid)
        .collect(Collectors.toList());
 

Ответ №2:

Вам нужно использовать этот flatMap() метод, предполагая, что у вас есть что-то вроде:

 class Country {
    List<CityDTO> cities = new ArrayList<>();
}

class CityDTO {
    UUID uuid;
    
    UUID getUuid() {
        return uuid;
    }
}

List<UUID> cityUUIDList = countryList.stream()
                                     .flatMap(c -> c.cities.stream())
                                     .map(CityDTO::getUuid)
                                     .collect(Collectors.toList());