Lambdas Preguiçosas e Gulosas (?)

Eu não entendo direito quando dizem que uma lambda é preguiçosa ou gulosa.

Por exemplo, a seguinte lambda:

IntStream.of(values).filter(value -> value % 2 ==0).forEach(value -> System.out.println(value);

Pelo teoria, filter é uma expressão lambda preguiçosa, portanto ela só é avaliada depois que uma expressão terminal é executada(forEach).

Mas primeiro ela não filtra os elementos criando um novo fluxo para forEach?

Enfim, to tentando entender isso, alguém pode me dar uma força?

1 curtida

Acho que compreendi, as expressões lambdas intermediárias só são executadas quando uma expressão terminal é localizada, é isso? Portanto, quando forEach é localizado pelo compilador, ele retorna e faz o filter?

Mas não tem nenhum motivo para isso acontecer certo? Simplesmente foi desenvolvido dessa maneira?

Lazy significa que a coleção só é realizada quando necessário ou quando encontra um comando terminal. A principio não tem nada a ver com lambdas. Um exemplo seria trabalhar com o conceito de coleções infinitas, algo impossível com uma coleção normal (gulosa).