Middle
Czym są wyrażenia lambda w Java i jakie możliwości zapewniają?
sobes.tech AI
Odpowiedź od AI
Wyrażenie lambda w Java to anonimowa funkcja, która nie należy do żadnej klasy i może być przekazana jako obiekt.
Składnia: (parametry) -> { ciało }
Możliwości:
- Interfejs funkcyjny: Wyrażenie lambda może być przypisane do zmiennej typu interfejsu funkcyjnego (interfejsu z jednym metodą abstrakcyjną).
// Interfejs funkcyjny @FunctionalInterface interface MyInterface { void myMethod(); } // Użycie wyrażenia lambda MyInterface lambda = () -> System.out.println("Witaj z lambda!"); lambda.myMethod(); - Uproszczenie kodu: Zastępują anonimowe klasy wewnętrzne do implementacji interfejsów funkcyjnych.
// Przed Java 8 (klasa anonimowa) Thread thread1 = new Thread(new Runnable() { @Override public void run() { System.out.println("Stary sposób"); } }); // Od Java 8 (lambda) Thread thread2 = new Thread(() -> System.out.println("Sposób lambda")); - Użycie w API Stream: Integrują się z API Stream do wykonywania operacji na kolekcjach.
List<String> names = Arrays.asList("Alice", "Bob", "Charlie"); names.stream() .filter(name -> name.startsWith("A")) // Wyrażenie lambda .forEach(System.out::println); // Referencja metody (wyrażenie lambda) - Opóźnione wykonanie: Kod wewnątrz wyrażenia lambda jest wykonywany tylko po wywołaniu metody funkcjonalnej.
- Zakres zmiennych: Wyrażenia lambda mogą przechwytywać zmienne z otoczenia (zmienne lokalne muszą być finalne lub efektywnie finalne).
| Zaleta | Opis |
|---|---|
| Zwięzłość kodu | Zmniejsza "werbalność" w porównaniu z anonimowymi klasami. |
| Lepsza czytelność | Kod staje się bardziej zwięzły i zrozumiały. |
| Przetwarzanie równoległe | Obsługiwane przez API Stream do operacji równoległych. |