Sobes.tech
Junior

Cosa sono le espressioni lambda in Java?

sobes.tech AI

Risposta dell'AI

Un'espressione lambda è una forma concisa di funzione anonima, che implementa i metodi di una interfaccia funzionale.

Struttura: (parametri) -> { corpo dell'espressione }.

Parte Descrizione Esempi
parametri Lista di parametri, può essere vuota. I tipi possono non essere specificati (sono dedotti). ()<br>x<br>(x, y)<br>(int x, String y)
-> Operatore freccia (arrow operator). Separa i parametri dal corpo. ->
corpo dell'espressione Corpo della lambda. Può essere un'espressione o un blocco di codice. x * x<br>{ System.out.println(x); }

Esempi di utilizzo:

  • Implementazione di interfacce funzionali:

    import java.util.function.Consumer;
    
    // Prima, implementazione tradizionale con classe anonima
    Consumer<String> consumerAnon = new Consumer<String>() {
        @Override
        public void accept(String s) {
            System.out.println(s);
        }
    };
    consumerAnon.accept("Classe anonima tradizionale");
    
    // Con espressione lambda
    Consumer<String> consumerLambda = s -> System.out.println(s);
    consumerLambda.accept("Espressione lambda");
    
  • Lavorare con l'API Streams:

    import java.util.Arrays;
    import java.util.List;
    import java.util.stream.Collectors;
    
    List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
    
    // Filtrare numeri pari con lambda
    List<Integer> evenNumbers = numbers.stream()
                                      .filter(n -> n % 2 == 0)
                                      .collect(Collectors.toList());
    
    System.out.println(evenNumbers); // Output: [2, 4]
    
    // Trasformare numeri nei loro quadrati
    List<Integer> squares = numbers.stream()
                                  .map(n -> n * n)
                                  .collect(Collectors.toList());
    
    System.out.println(squares); // Output: [1, 4, 9, 16, 25]
    

Vantaggi:

  • Riduzione del codice rispetto alle classi anonime.
  • Maggiore leggibilità per operazioni semplici.
  • Facilità di utilizzo con l'API Streams e altre API orientate alla programmazione funzionale.