Sobes.tech
Junior

Qu'est-ce que les expressions lambda en Java?

sobes.tech IA

Réponse de l'IA

Une expression lambda est une forme concise de fonction anonyme, qui implémente les méthodes d'une interface fonctionnelle.

Structure : (paramètres) -> { corps de l'expression }.

Partie Description Exemples
paramètres Liste de paramètres, peut être vide. Les types peuvent ne pas être spécifiés (sont inférés). ()<br>x<br>(x, y)<br>(int x, String y)
-> Opérateur flèche (arrow operator). Sépare les paramètres du corps. ->
corps de l'expression Corps de la lambda. Peut être une expression ou un bloc de code. x * x<br>{ System.out.println(x); }

Exemples d'utilisation :

  • Implémentation d'interfaces fonctionnelles :

    import java.util.function.Consumer;
    
    // Avant, implémentation traditionnelle avec classe anonyme
    Consumer<String> consumerAnon = new Consumer<String>() {
        @Override
        public void accept(String s) {
            System.out.println(s);
        }
    };
    consumerAnon.accept("Classe anonyme traditionnelle");
    
    // En utilisant une expression lambda
    Consumer<String> consumerLambda = s -> System.out.println(s);
    consumerLambda.accept("Expression lambda");
    
  • Travailler avec 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);
    
    // Filtrer les nombres pairs avec lambda
    List<Integer> evenNumbers = numbers.stream()
                                      .filter(n -> n % 2 == 0)
                                      .collect(Collectors.toList());
    
    System.out.println(evenNumbers); // Affiche : [2, 4]
    
    // Transformer les nombres en leurs carrés
    List<Integer> squares = numbers.stream()
                                  .map(n -> n * n)
                                  .collect(Collectors.toList());
    
    System.out.println(squares); // Affiche : [1, 4, 9, 16, 25]
    

Avantages :

  • Réduction du code par rapport aux classes anonymes.
  • Amélioration de la lisibilité pour des opérations simples.
  • Facilité d'utilisation avec l'API Streams et autres API orientées programmation fonctionnelle.