Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Problema ao utilizar map com 2 listas

Boa noite, eu estou com a seguinte duvida,

a criterio de testes criei 2 classes, Pessoa e Carro, Pessoa contendo uma lista de Carros, a minha ideia era percorrer a lista de pessoas, fazer um filtro, pegar o resultado e iterar pelos carros destas pessoas e imprimir. Porem estou com dificuldades, poderiam me ajudar a resolver ?

        pessoas.stream()
            .filter(p -> p.getIdade() >= 80)
            .map(Pessoa::getCarros)
            .map(Carro::getNome)
            .forEach(System.out::println);

O segundo map esta dando erro de compilação. O que devo fazer para o meu codigo acima ficar de acordo ? Agradeço a atenção.

1 resposta
solução!

Oi Fernando!

Creio que neste caso só usando um método chamado flatMap().

Ele serve justamente pra esse caso, que o resultado do seu map() vai retornar um Stream<List<Carro>>. Porém o que queremos é um Stream<Carro>. Com o flatMap() conseguimos fazer isso, como se estivéssemos "achatando" todo o resultado em um Stream só:

pessoas.stream()
                .filter(p -> p.getIdade() >= 80)
                .flatMap(pessoa -> pessoa.getCarros().stream())
                .map(Carro::getNome)
                .forEach(System.out::println);

Temos que chamar o método stream() porque aí ele vai saber que tem que depois deixar tudo em um Stream só. :)

Abraço!