Stream java 8

Qual a diferença entre essas duas linhas de codigo , pra imrpimir uma lista ? qual mais recomendavel usar ? existem diferença de performance ou coisa do tipo ?

//lista1.forEach(p -> System.out.println(p)); lista1.forEach(System.out::println);

Quando declaramos System.out::println, nós temos na verdade um código equivalente a essa expressão lambda p -> System.out.println(p).
Ou seja, o compilador do Java vai saber que ao realizar o forEach() na lista, a cada iteração do método forEach() teremos um objeto referente ao tipo daquela lista e ele atribui esse tipo como parâmetro que deverá ser passado ao método de referência, que no caso é o println.

Então o que acontece é que, quando você faz isso: System.out::println implicitamente você está dizendo ao compilador, faça isso: p -> System.out.println(p)
Em relação a performance acho que não há diferença.

1 curtida

Hum entendi , cara muito boa sua explicação … agradeco @romarcio