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

Impressão da variável nomes do tipo Stream<String>

Por que a impressão da variável nomes abaixo, apresenta a sua referência?

Stream nomes = cursos.stream().map(Curso::getNome); System.out.println(nomes);

Console: java.util.stream.ReferencePipeline$3@5e9f23b4

1 resposta
solução!

Olá Lindomar, tudo bem com você?

Isso acontece porque nomes é uma Stream!

Para que possamos imprimir os dados gerados a partir do map(Curso::getNome), precisamos usar o método forEach(). Assim como fizemos para imprimir os nomes dos cursos:

Stream<Curso> streamDeCurso = cursos.stream().filter(c -> c.getAlunos() > 100);

cursos.forEach(c -> System.out.println(c.getNome()));

Agora, fazendo a conversão do nosso Stream<Curso> para Stream<String> através do método map(Curso::getNome):

Stream<String> nomes = cursos.stream().map(Curso::getNome);

nomes.forEach(System.out::println);

Resumindo: o método cursos.stream() retorna um Stream<Curso> e, através do map(Curso::getNome), é gerada uma nova Stream com elementos do tipo String (Stream<String>). Para imprimir os elementos da nova Stream com os nomes dos cursos, usamos o método forEach().

Acho que é isso. Perceba que agora com a nova Stream, podemos imprimir as Strings contidas nela diretamente e já conseguimos o mesmo efeito do cursos.forEach(c -> System.out.println(c.getNome())) sem precisar chamar o método getNome().

Fez sentido? Se ficou alguma dúvida, é só avisar!

Grande abraço e bons estudos!!