Lambda
Introdução às Expressões Lambda em Java
Para falarmos de Stream precisamos conhecer as funções Lambda.
O que são expressões lambda?
Expressões lambda são como pequenas peças de código que você pode passar para outras partes do seu programa. Imagine-as como mini-funções que você cria onde e quando precisar delas, sem precisar nomeá-las. Essas mini-funções podem ser armazenadas em variáveis, passadas como argumentos para métodos ou até mesmo retornadas como resultados de outros métodos. Em Java, as expressões lambda são especialmente úteis quando você precisa usar métodos que exigem "interfaces funcionais" (interfaces com apenas um método abstrato). Com as expressões lambda, você pode escrever código de forma mais direta e enxuta, tornando-o mais fácil de entender e manter.
Por que usar expressões lambda?
Quando você está escrevendo um programa, muitas vezes precisa realizar tarefas simples, como filtrar uma lista de itens, ordená-los ou aplicar uma operação a cada item. Antes das expressões lambda, você precisaria escrever muito código para fazer essas tarefas simples, criando classes adicionais apenas para implementar métodos de interfaces funcionais. Com as expressões lambda, você pode fazer essas tarefas com muito menos código, tornando seu programa mais legível e fácil de entender. Além disso, as expressões lambda permitem que você se concentre mais na lógica do problema em si, em vez de se perder em detalhes de implementação desnecessários. Em resumo, as expressões lambda tornam sua vida como programador mais fácil, permitindo que você escreva código mais limpo e conciso.
Sintaxe básica de expressões lambda em Java
A sintaxe básica de uma expressão lambda consiste em uma lista de parâmetros (se houver), seguida pela seta ->
e depois pelo corpo da função. Por exemplo, x -> x * x
representa uma função que recebe um parâmetro x
e retorna o quadrado desse valor.
Exemplos de uso de expressões lambda
Vamos ver alguns exemplos comparativos para entender como as expressões lambda podem simplificar o código em Java.
Lambda com forEach()
import java.util.List;
public class Antes {
public static void main(String[] args) {
List<String> cores = List.of("Vermelho", "Azul", "Amarelo");
System.out.println("Código Antes (Sem Expressões Lambda)");
for (String cor : cores) {
System.out.print(cor + " ");
}
System.out.println("\nCódigo Depois (Com Expressões Lambda)");
cores.forEach(cor -> System.out.print(cor + " "));
}
}
Neste exemplo, vemos como a introdução das expressões lambda simplifica o código pelo uso direto da expressão lambda (cor -> System.out.print(cor + " "))
.
Exemplo com interfaces Runnable e Comparator
// Sem expressões lambda - usando classes anônimas
public class Antes {
public static void main(String[] args) {
Thread t = new Thread(new Runnable() {
public void run() {
System.out.println("Olá do Thread!");
}
});
t.start();
}
}
// Sem expressões lambda - usando classes anônimas
import java.util.Comparator;
public class AntesComparator {
public static void main(String[] args) {
Comparator<String> comparator = new Comparator<String>() {
public int compare(String s1, String s2) {
return s1.compareTo(s2);
}
};
int result = comparator.compare("hello", "world");
System.out.println(result);
}
}
Nesses exemplos, podemos ver como as expressões lambda simplificam o código, eliminando a necessidade de criar classes anônimas para implementar interfaces funcionais, como Runnable
e Comparator
. Isso torna o código mais conciso e legível, facilitando a manutenção e compreensão do mesmo.