¿Por qué Stream.flatMap no puede aceptar una colección?

Dado lo siguiente como un ejemplo de clases de datos:

class Country {

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

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

}

class Region {

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

}

Presumiendo que tendría una lista de países

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

Y quería transmitirlos a sus Regiones y sus nombres correspondientes, me gustaría hacer lo siguiente:

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

Sin embargo, ese código no se compila ya que el valor de retorno de "getRegions" es una Colección (Lista) en lugar de un Stream, que acepta el Método flatMap. Pero como sé que cualquier Colección se puede transmitir a través de su Método Collection.stream () eso no debería ser un problema. Todavía me veo obligado a escribirlo de la siguiente manera:

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

Lo cual es (dado un contexto más rico) mucho menos legible que el primero.

La pregunta es, ¿hay alguna razón, que me estoy perdiendo, para que esto sea tan voluminoso? Tengo muchos ejemplos en nuestro marco en los que me veo obligado a tomar esa ruta, dejándome siempre con un sabor agrio. (Supongo que solo tengo que agregar Kotlin a nuestros proyectos y extender la clase Stream con un Método flatMap que toma una Colección: ¿o no?)

Respuestas a la pregunta(1)

Su respuesta a la pregunta