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
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
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!!