O que são lambda expressions? E qual a sacada em usá-las?

Lambda expressions são uma forma concisa de escrever funções anônimas no paradigma de programação funcional. Elas permitem que você escreva código mais expressivo e de fácil leitura, economizando tempo e linhas de código.

A sacada em usar lambda expressions está na sua simplicidade e flexibilidade. Com elas, você pode tratar funções como cidadãos de primeira classe, passando-as como argumentos de outras funções ou atribuindo-as a variáveis. Isso facilita a implementação de callbacks, tratamento de eventos e programação assíncrona.

Por exemplo, imagine que você tenha uma lista de números e queira filtrar apenas os números pares. Utilizando uma lambda expression, você pode fazer assim em uma linha de código:

List<Integer> numeros = Arrays.asList(1, 2, 3, 4, 5, 6);
List<Integer> numerosPares = numeros.stream()
                                    .filter(n -> n % 2 == 0)
                                    .collect(Collectors.toList());

Neste exemplo, a expressão lambda (n -> n % 2 == 0) é usada para filtrar os números pares. Ela é passada como argumento para o método filter, que retorna uma nova stream contendo apenas os números pares.

Além disso, lambda expressions também podem ser usadas em programação concorrente, aproveitando o poder dos streams paralelos do Java. Você pode dividir um conjunto de dados em várias partes e processá-las em paralelo, utilizando lambdas para definir as operações a serem realizadas em cada parte.

No geral, as lambda expressions ajudam a tornar o código mais legível, reduzindo a necessidade de escrever classes anônimas ou criar métodos auxiliares separados. Elas são especialmente úteis em situações onde o foco está na lógica da função, em vez de em detalhes de implementação.