Espressioni Lambda Java
Espressioni Lambda Java
Le espressioni Lambda sono state aggiunte in Java 8.
Un'espressione lambda è un breve blocco di codice che accetta parametri e restituisce un valore. Le espressioni Lambda sono simili ai metodi, ma non necessitano di un nome e possono essere implementate direttamente nel corpo di un metodo.
Sintassi
L'espressione lambda più semplice contiene un singolo parametro e un'espressione:
parameter -> expression
Per utilizzare più di un parametro, racchiuderli tra parentesi:
(parameter1, parameter2) -> expression
Le espressioni sono limitate. Devono restituire immediatamente un valore e non possono contenere variabili, assegnazioni o istruzioni come if
o for
. Per eseguire operazioni più complesse, è possibile utilizzare un blocco di codice con parentesi graffe. Se l'espressione lambda deve restituire un valore, il blocco di codice dovrebbe avere return
un'istruzione.
(parameter1, parameter2) -> { code block }
Utilizzo delle espressioni Lambda
Le espressioni Lambda vengono generalmente passate come parametri a una funzione:
Esempio
Usa un'espressione lamba nel metodo ArrayList
's forEach()
per stampare ogni elemento nell'elenco:
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); } );
}
}
Le espressioni Lambda possono essere archiviate in variabili se il tipo della variabile è un'interfaccia che ha un solo metodo. L'espressione lambda dovrebbe avere lo stesso numero di parametri e lo stesso tipo restituito di quel metodo. Java ha molti di questi tipi di interfacce integrate, come l' Consumer
interfaccia (trovata nel java.util
pacchetto) utilizzata dalle liste.
Esempio
Usa l' Consumer
interfaccia di Java per memorizzare un'espressione lambda in una variabile:
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 );
}
}
Per usare un'espressione lambda in un metodo, il metodo deve avere un parametro con un'interfaccia a metodo singolo come tipo. Chiamando il metodo dell'interfaccia verrà eseguita l'espressione lambda:
Esempio
Crea un metodo che accetta un'espressione lambda come parametro:
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);
}}