Junior
Co pozwalają robić wyrażenia lambda w Java?
sobes.tech AI
Odpowiedź od AI
Wyrażenia lambda w Java, wprowadzone w Java 8, umożliwiają:
- Implementację interfejsów z jednym metodą abstrakcyjną (interfejsy funkcyjne): To ich główne przeznaczenie. Lambdy zapewniają zwięzłą składnię do tworzenia instancji interfejsów funkcyjnych.
// Przed Java 8
Runnable runnable = new Runnable() {
@Override
public void run() {
System.out.println("Witaj przed Java 8!");
}
};
// Z Java 8
Runnable lambdaRunnable = () -> System.out.println("Witaj Java 8!");
- Przekazywanie zachowań (funkcji) jako argumentów do metod: Rozszerza to możliwości programowania funkcyjnego w Java. Metody mogą przyjmować wyrażenia lambda jako parametry.
// Przykład użycia API Stream z lambda
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
names.stream()
.filter(name -> name.startsWith("A")) // Lambda jako argument filter
.forEach(System.out::println); // Lambda (referencja do metody) jako argument forEach
- Używanie API Stream: Wyrażenia lambda są podstawą do pracy z nowym API Stream, umożliwiając efektywne przetwarzanie kolekcji danych.
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int sumOfEven = numbers.stream()
.filter(n -> n % 2 == 0)
.mapToInt(Integer::intValue)
.sum();
-
Uproszczenie implementacji anonimowych klas wewnętrznych dla interfejsów funkcyjnych: Lambdy zastępują rozbudowaną składnię anonimowych klas w tym kontekście.
-
Poprawa czytelności kodu: Dla prostych operacji lambdy czynią kod bardziej zwięzłym i zrozumiałym.
-
Umożliwienie opóźnionego wykonania kodu: Wyrażenie lambda opisuje działanie, które zostanie wykonane później, gdy zostanie wywołane.
Lambdy mają również dostęp do zmiennych lokalnych z zewnętrznego zakresu (jeśli są efektywnie finalne).
Ogólnie rzecz biorąc, wyrażenia lambda czynią Javę bardziej ekspresyjną i odpowiednią do stylu programowania funkcyjnego.