StreamEx

дено следующее в качестве примера классов данных:

class Country {

    List<Region> regions = new ArrayList<>();

    List<Region> getRegions() {
        return regions;
    }

}

class Region {

    String getName() {
        return "some name";
    }

}

Предполагая, что у меня будет список стран

    List<Country> countries = new ArrayList<>();

И я хотел бы передать их в их регионы и соответствующие им имена, я хотел бы сделать следующее:

    countries.stream().flatMap(Country::getRegions).map(Region::getName)...

Однако этот код не компилируется, поскольку возвращаемое значение «getRegions» представляет собой Collection (List), а не Stream, который принимает метод flatMap. Но так как я знаю, что любая коллекция может быть передана через метод Collection.stream (), это не должно быть проблемой. Тем не менее я вынужден написать это следующим образом:

    countries.stream().flatMap(c -> c.getRegions().stream()).map(Region::getName)...

Который (учитывая более богатый контекст) гораздо менее читабелен, чем первый.

Вопрос в том, есть ли какая-то причина, по которой я упускаю, чтобы это было настолько громоздко? У меня есть много примеров в нашей структуре, на которых я вынужден пойти по этому пути, всегда оставляя меня с кислым вкусом. (Думаю, мне просто нужно добавить Kotlin в наши проекты и расширить класс Stream с помощью метода flatMap, который принимает коллекцию: p или я?)

Ответы на вопрос(1)

Ваш ответ на вопрос