Sobes.tech
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.