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

  1. 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();  
    
  2. 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"));  
    
  3. 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)  
    
  4. Opóźnione wykonanie: Kod wewnątrz wyrażenia lambda jest wykonywany tylko po wywołaniu metody funkcjonalnej.
  5. 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.