Junior
Cosa sono le espressioni lambda in Java?
sobes.tech AI
Risposta dell'AI
Un'espressione lambda è una forma concisa di funzione anonima, che implementa i metodi di una interfaccia funzionale.
Struttura: (parametri) -> { corpo dell'espressione }.
| Parte | Descrizione | Esempi |
|---|---|---|
parametri |
Lista di parametri, può essere vuota. I tipi possono non essere specificati (sono dedotti). | ()<br>x<br>(x, y)<br>(int x, String y) |
-> |
Operatore freccia (arrow operator). Separa i parametri dal corpo. | -> |
corpo dell'espressione |
Corpo della lambda. Può essere un'espressione o un blocco di codice. | x * x<br>{ System.out.println(x); } |
Esempi di utilizzo:
-
Implementazione di interfacce funzionali:
import java.util.function.Consumer; // Prima, implementazione tradizionale con classe anonima Consumer<String> consumerAnon = new Consumer<String>() { @Override public void accept(String s) { System.out.println(s); } }; consumerAnon.accept("Classe anonima tradizionale"); // Con espressione lambda Consumer<String> consumerLambda = s -> System.out.println(s); consumerLambda.accept("Espressione lambda"); -
Lavorare con l'API Streams:
import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5); // Filtrare numeri pari con lambda List<Integer> evenNumbers = numbers.stream() .filter(n -> n % 2 == 0) .collect(Collectors.toList()); System.out.println(evenNumbers); // Output: [2, 4] // Trasformare numeri nei loro quadrati List<Integer> squares = numbers.stream() .map(n -> n * n) .collect(Collectors.toList()); System.out.println(squares); // Output: [1, 4, 9, 16, 25]
Vantaggi:
- Riduzione del codice rispetto alle classi anonime.
- Maggiore leggibilità per operazioni semplici.
- Facilità di utilizzo con l'API Streams e altre API orientate alla programmazione funzionale.