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