Expressões Java Lambda
Expressões Java Lambda
As expressões lambda foram adicionadas no Java 8.
Uma expressão lambda é um pequeno bloco de código que recebe parâmetros e retorna um valor. As expressões lambda são semelhantes aos métodos, mas não precisam de nome e podem ser implementadas diretamente no corpo de um método.
Sintaxe
A expressão lambda mais simples contém um único parâmetro e uma expressão:
parameter -> expression
Para usar mais de um parâmetro, coloque-os entre parênteses:
(parameter1, parameter2) -> expression
As expressões são limitadas. Eles devem retornar imediatamente um valor e não podem conter variáveis, atribuições ou instruções como if
ou for
. Para realizar operações mais complexas, um bloco de código pode ser usado com chaves. Se a expressão lambda precisar retornar um valor, o bloco de código deverá ter uma return
instrução.
(parameter1, parameter2) -> { code block }
Usando expressões lambda
As expressões lambda geralmente são passadas como parâmetros para uma função:
Exemplo
Use uma expressão lamba no método ArrayList
's forEach()
para imprimir todos os itens da lista:
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
ArrayList<Integer> numbers = new ArrayList<Integer>();
numbers.add(5);
numbers.add(9);
numbers.add(8);
numbers.add(1);
numbers.forEach( (n) -> { System.out.println(n); } );
}
}
As expressões lambda podem ser armazenadas em variáveis se o tipo da variável for uma interface que possui apenas um método. A expressão lambda deve ter o mesmo número de parâmetros e o mesmo tipo de retorno desse método. Java tem muitos desses tipos de interfaces embutidos, como a Consumer
interface (encontrada no java.util
pacote) usada por listas.
Exemplo
Use a interface do Java Consumer
para armazenar uma expressão lambda em uma variável:
import java.util.ArrayList;
import java.util.function.Consumer;
public class Main {
public static void main(String[] args) {
ArrayList<Integer> numbers = new ArrayList<Integer>();
numbers.add(5);
numbers.add(9);
numbers.add(8);
numbers.add(1);
Consumer<Integer> method = (n) -> { System.out.println(n); };
numbers.forEach( method );
}
}
Para usar uma expressão lambda em um método, o método deve ter um parâmetro com uma interface de método único como seu tipo. Chamar o método da interface executará a expressão lambda:
Exemplo
Crie um método que receba uma expressão lambda como parâmetro:
interface StringFunction { String run(String str);
}public class Main { public static void main(String[] args) { StringFunction exclaim = (s) -> s + "!"; StringFunction ask = (s) -> s + "?"; printFormatted("Hello", exclaim); printFormatted("Hello", ask);
}public static void printFormatted(String str, StringFunction format) { String result = format.run(str); System.out.println(result);
}}