1
resposta

Método mais simplificado não funciona:

Usando os lambdas que aprendi nos cursos anteriores, gostaria de saber por que o método mais simplificado, não funciona: listaEmpresas.forEach(out.println()); testei colocando o SysO (pra imprimir no console) e funcionou.

    Banco banco = new Banco();
    List<Empresa> listaEmpresas = banco.getEmpresas();

    PrintWriter out = response.getWriter();
    out.println("<html><body><ul>"); 

    listaEmpresas.forEach(s -> out.println("<li>" + s.getNome() + "</li>")); 
//    Forma simplificada que não funciona: listaEmpresas.forEach(out.println());

// Forma que tentei no console e deu certo: listaEmpresas.forEach(System.out::println);

    out.println("</ul></body></html>");
//        response.getWriter().append("Served at: ").append(request.getContextPath());

O erro que dar é que o método forEach não é aplicável no método void(). O que isso quer dizer exatamente? Teria alguma outra forma de imprimir a lista? Vlw!!!!

1 resposta

Olá Lucas, tudo bem?

Pelo que entendi, o problema está ocorrendo porque o método forEach espera um Consumer como parâmetro, que é uma interface funcional que recebe um argumento e não retorna valor. O método println, por sua vez, retorna void, ou seja, não pode ser utilizado como argumento do forEach.

Uma forma de resolver esse problema é utilizar um lambda que receba o argumento e chame o método println dentro dele, como você já está fazendo na linha abaixo do código que não está funcionando:

listaEmpresas.forEach(s -> out.println("<li>" + s.getNome() + "</li>"));

Essa é a forma mais adequada de imprimir a lista utilizando forEach.

Espero ter ajudado e bons estudos!