Java lambda. Zrozum wyrażenie i wykorzystaj w praktyce
Ostatnia aktualizacja 3 kwietnia, 2024
Java lambda to wprowadzone w 8. wersji wyrażenie, które zrewolucjonizowało sposób pisania kodu. Umożliwia ono bardziej zwięzłe i czytelne podejście do programowania funkcyjnego. Pozwala na tworzenie anonimowych funkcji, co znacznie upraszcza obsługę kolekcji i strumieni danych. W jaki sposób z niego korzystać?
Java lambda – na czym polega?
Lambda to sposób na wyrażenie instancji interfejsu funkcyjnego w języku Java. Charakteryzuje się to większą zwięzłością niż tradycyjne implementacje anonimowych klas wewnętrznych. Pozwala na przekazywanie zachowań jako argumentów do metod, tworzenie funkcji na miejscu i ułatwia pracę z kolekcjami danych.
Przykład podstawowego wyrażenia lambda:
(List<String> list) -> list.isEmpty()
W tym przykładzie Java lambda jest używana do sprawdzenia, czy lista stringów jest pusta. Jest to prosty sposób na przedstawienie funkcji, która przyjmuje listę jako argument i zwraca wartość boolean.
Kiedy warto wykorzystać wyrażenie lambda?
Wyrażenia lambda stały się istotnym elementem nowoczesnego kodu Java. Umożliwiają programistom pisanie kodu, który jest nie tylko krótszy, ale także łatwiejszy do zrozumienia i utrzymania. Wobec tego znajdują swoje zastosowanie w różnorodnych sytuacjach:
- Implementacja interfejsów funkcyjnych. Gdy potrzebujemy szybkiej i zwięzłej implementacji interfejsu zawierającego tylko jedną metodę abstrakcyjną.
- Przetwarzanie kolekcji. Do efektywnego filtrowania, mapowania, redukcji i innych operacji na kolekcjach danych z użyciem strumieni (Streams).
- Obsługa zdarzeń. W GUI i innych scenariuszach programistycznych, w których lambda może służyć do obsługi zdarzeń bez potrzeby tworzenia anonimowych klas.
- Przekazywanie zachowań jako argumentów. Wyrażenia lambda pozwalają na przekazywanie kodu jako argumentu do metod. Jest to szczególnie przydatne w API, które operują na zachowaniach lub strategiach.
- Tworzenie prostych funkcji callback. Do zaimplementowania szybkiego callbacka bez potrzeby definiowania dodatkowego interfejsu lub klasy.
- Użycie w API Stream i Optional. Lambda są intensywnie wykorzystywane w API Stream i Optional do tworzenia bardziej zwięzłego i czytelnego kodu przy operacjach na strumieniach danych i obsłudze wartości opcjonalnych.
- Operacje na wątkach. W przypadkach, gdy potrzebujemy uruchomić prosty blok kodu w nowym wątku, wyrażenia lambda w połączeniu z API Concurrency w Javie ułatwiają to zadanie.
- Refaktoryzacja kodu dla większej czytelności. Zamiana anonimowych klas wewnętrznych na wyrażenia lambda, gdzie to możliwe, aby kod był bardziej zwięzły i łatwiejszy do zrozumienia.
Wykorzystanie lambd w operacjach na kolekcjach
Java lambda znalazła szerokie zastosowanie w operacjach na kolekcjach, w których znacznie upraszcza i przyspiesza przetwarzanie danych.
Filtracja kolekcji z użyciem lambd:
List<String> names = Arrays.asList("Anna", "Bob", "Charlie", "Diana");
List<String> filteredNames = names.stream()
.filter(name -> name.startsWith("A"))
.collect(Collectors.toList());
W tym przykładzie filtrujemy listę imion tak, aby zachować tylko te, które zaczynają się na literę “A”. Użycie streamu w połączeniu z wyrażeniem lambda w metodzie filter
demonstruje moc i elastyczność wyrażenia lambda w przetwarzaniu kolekcji.
Java lambda a interfejsy funkcyjne
Interfejsy funkcyjne zawierają dokładnie jedną metodę abstrakcyjną, co czyni je idealnymi kandydatami do implementacji za pomocą wyrażeń lambda.
Przykład użycia lambdy z interfejsem funkcyjnym:
@FunctionalInterface
interface SimpleFunction {
void execute(String text);
}
SimpleFunction greetingFunction = (String message) -> System.out.println("Hello, " + message);
greetingFunction.execute("World");
Tutaj definiujemy prosty interfejs funkcyjny SimpleFunction
z jedną metodą execute
. Następnie za pomocą Java lambda, implementujemy ten interfejs, przekazując zachowanie, które wyświetla personalizowane powitanie.
Dalsza część tekstu znajduje się pod materiałem wideo:
Java Lambda a metody referencyjne
Metody referencyjne to kolejny sposób na uproszczenie kodu w Javie, szczególnie w połączeniu z wyrażeniami lambda.
Przykład użycia metody referencyjnej z lambdą:
List<String> cities = Arrays.asList("Warsaw", "Berlin", "Paris");
cities.forEach(System.out::println);
W tym przykładzie zamiast używać wyrażenia lambda do iteracji po liście i wydrukowania każdego elementu, używamy metody referencyjnej System.out::println
. Jest to jeszcze bardziej zwięzłe i czytelne.
Dziękujemy, że przeczytałaś/eś nasz artykuł. Obserwuj EnterTheCode.pl w Wiadomościach Google, aby być na bieżąco.
Czytaj także: