Por que o Stream.flatMap não pode aceitar uma coleção?

Dado o seguinte como um exemplo de classes de dados:

class Country {

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

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

}

class Region {

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

}

Presumindo que eu teria uma lista de países

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

E eu queria transmitir esses dados para suas regiões e seus nomes correspondentes, gostaria de fazer o seguinte:

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

No entanto, esse código não é compilado, pois o valor de retorno de "getRegions" é uma Collection (List) em oposição a um Stream, que o método flatMap aceita. Mas como eu sei que qualquer Collection pode ser transmitida por meio do método Collection.stream () que não deve ser um problema. Ainda sou obrigado a escrever da seguinte forma:

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

Qual é (dado um contexto mais rico) muito menos legível que o anterior.

A pergunta é: existe alguma razão pela qual estou perdendo, para que isso seja tão volumoso? Tenho muitos exemplos em nossa estrutura em que sou forçado a seguir esse caminho, sempre me deixando com um gosto amargo. (Acho que só preciso adicionar o Kotlin aos nossos projetos e estender a classe Stream com um método flatMap que utiliza uma Collection: p ou devo?)

questionAnswers(1)

yourAnswerToTheQuestion