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?)