Centrum wiedzy o technologiach i pracy w IT
java lambda

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ć?

Nie udało się zapisać Twojej subskrypcji. Spróbuj ponownie.
Udało się! Widzimy się niebawem – newsletter wysyłamy w każdy wtorek

Otrzymuj za darmo unikalne poradniki, dane i wiedzę o pracy w IT – dostarczane co tydzień

Klikając “Zapisz mnie” wyrażasz zgodę na otrzymywanie e-maili od redakcji, a także ofert partnerów oraz akceptujesz naszą Politykę prywatności.

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:

Java final – zastosowania i przykłady

Akka – środowisko do bezpiecznego skalowania systemów

Total
0
Shares
_podobne artykuły