Sobes.tech
Junior

O que permitem fazer as expressões lambda em Java?

sobes.tech IA

Resposta da IA

As expressões lambda em Java, introduzidas no Java 8, permitem:

  • Implementar interfaces com um único método abstrato (interfaces funcionais): Este é o seu objetivo principal. As lambdas fornecem uma sintaxe concisa para criar instâncias de interfaces funcionais.
// Antes do Java 8
Runnable runnable = new Runnable() {
    @Override
    public void run() {
        System.out.println("Olá antes do Java 8!");
    }
};

// Com Java 8
Runnable lambdaRunnable = () -> System.out.println("Olá Java 8!");
  • Passar comportamentos (funções) como argumentos para métodos: Isto amplia as capacidades da programação funcional em Java. Os métodos podem aceitar expressões lambda como parâmetros.
// Exemplo de uso da API Stream com lambda
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
names.stream()
     .filter(name -> name.startsWith("A")) // Lambda como argumento de filter
     .forEach(System.out::println);       // Lambda (Referência de método) como argumento de forEach
  • Usar a API Stream: As expressões lambda são fundamentais para trabalhar com a nova API Stream, permitindo processar coleções de dados de forma eficiente.
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int sumOfEven = numbers.stream()
                      .filter(n -> n % 2 == 0)
                      .mapToInt(Integer::intValue)
                      .sum();
  • Simplificar a implementação de classes internas anónimas para interfaces funcionais: As lambdas substituem a sintaxe verbosa de classes anónimas neste contexto.

  • Melhorar a legibilidade do código: Para operações simples, as lambdas tornam o código mais conciso e compreensível.

  • Permitir a execução diferida do código: A expressão lambda descreve uma ação que será executada mais tarde, quando for chamada.

As lambdas também têm acesso às variáveis locais do ambiente externo (se forem efetivamente finais).

No geral, as expressões lambda tornam o Java mais expressivo e adequado ao estilo de programação funcional.