Middle
Cosa sono le espressioni lambda in Java e quali funzionalità offrono?
sobes.tech AI
Risposta dell'AI
L'espressione lambda in Java è una funzione anonima che non appartiene a nessuna classe e può essere passata come oggetto.
Sintassi: (parametri) -> { corpo }
Opportunità:
- Interfaccia funzionale: L'espressione lambda può essere assegnata a una variabile di tipo interfaccia funzionale (interfaccia con un solo metodo astratto).
// Interfaccia funzionale @FunctionalInterface interface MyInterface { void myMethod(); } // Uso dell'espressione lambda MyInterface lambda = () -> System.out.println("Ciao da lambda!"); lambda.myMethod(); - Semplificazione del codice: Sostituiscono le classi interne anonime per implementare interfacce funzionali.
// Prima di Java 8 (classe anonima) Thread thread1 = new Thread(new Runnable() { @Override public void run() { System.out.println("Vecchio modo"); } }); // Da Java 8 (lambda) Thread thread2 = new Thread(() -> System.out.println("Modo lambda")); - Utilizzo in Stream API: Si integrano con l'API Stream per eseguire operazioni sulle collezioni.
List<String> names = Arrays.asList("Alice", "Bob", "Charlie"); names.stream() .filter(name -> name.startsWith("A")) // Espressione lambda .forEach(System.out::println); // Riferimento metodo (espressione lambda) - Esecuzione differita: Il codice all’interno dell’espressione lambda viene eseguito solo quando si chiama il metodo funzionale.
- Ambito delle variabili: Le espressioni lambda possono catturare variabili dall’ambiente esterno (le variabili locali devono essere finali o effettivamente finali).
| Vantaggio | Descrizione |
|---|---|
| Sintesi del codice | Riduce la "verbosità" rispetto alle classi anonime. |
| Migliore leggibilità | Il codice diventa più conciso e comprensibile. |
| Elaborazione parallela | Supportata dall’API Stream per operazioni parallele. |