Maison  >  Article  >  Java  >  Lambda en Java

Lambda en Java

Barbara Streisand
Barbara Streisandoriginal
2024-11-19 16:38:03435parcourir

Lambdas in Java

Lambda en Java

Les Lambdas sont des fonctions non déclarées, ce qui signifie qu'elles n'ont pas besoin d'être explicitement déclarées pour être utilisées. Il n'est pas nécessaire de spécifier un nom, des paramètres, des modificateurs d'accès ou un type de retour. Essentiellement, un lambda est un moyen plus simple d'implémenter une interface avec une seule méthode.

En Java, la syntaxe de base des fonctions lambda est :

(args) -> (body)

Exemples

(int x, int y) -> { return x * y; }
Aluno display = (Pessoa p) -> { System.out.println(p.idade); }
() -> System.out.println(new Date());
() -> { return 25.789; }
x -> x < 100;

Les accolades sont requises uniquement lorsque le corps de la fonction contient plusieurs instructions. Par exemple :

(int x, int y) -> { return x * y; }

Peut s'écrire :

(int x, int y) -> return x * y;

Les deux formes produisent le même résultat.

Les fonctions Lambda peuvent avoir des paramètres ou aucun. Les types de paramètres peuvent également être omis, car Java déduira leurs types.

Exemples

  1. Fonction avec paramètres (avec types déclarés) :
   (int x, int y) -> { return x * y; }
  1. Fonction avec paramètres (sans types déclarés) :
   (x, y) -> { return x * y; }
  1. Fonction sans paramètres :
   () -> System.out.println(new Date());

Si aucun mot-clé return n'est utilisé, le type de retour de la fonction est déduit comme void :

(a) -> this.x = a;

Il est important de noter que les lambdas sont différents des classes anonymes. Cela peut être observé dans les fichiers .class générés. Contrairement aux classes anonymes, les lambdas ne génèrent pas plusieurs fichiers .class pour chaque utilisation.


Applications de Lambdas en Java

Sujets

Lambdas simplifie le code en réduisant la verbosité lorsque vous travaillez avec des threads.

// Implementing the Runnable interface and creating a thread with it
Runnable e = new Runnable() {
    public void run() {
        System.out.println(new Date());
    }
};
new Thread(e).start();

// The same implementation using a lambda expression
Runnable e = () -> System.out.println(new Date());
new Thread(e).start();

// Even more concise
new Thread(
    () -> System.out.println(new Date())
).start();

Collections

Les Lambdas simplifient les fonctions telles que le tri et le filtrage dans les collections.

// Print all elements in a list
List<String> list = Arrays.asList("João", "Ana", "Maria", "Cesar");
for (String s : list) {
    System.out.println(s);
}

// Using lambdas
list.forEach(s -> System.out.println(s));

// Lambda with multiple statements
list.forEach(s -> {
    if (StringUtils.equals("Cesar", s)) {
        System.out.println(s);
    }
});

// Conventional sorting
Collections.sort(list, new Comparator<String>() {
    @Override
    public int compare(String s1, String s2) {
        return s1.compareTo(s2);
    }
});
list.forEach(p -> System.out.println(p));

// Sorting using lambdas
Collections.sort(list, (String s1, String s2) -> s1.compareTo(s2));
list.forEach(p -> System.out.println(p));

Auditeurs

Les Lambdas simplifient le code dans les écouteurs, qui implémentent le modèle de conception Observer.

// Listening to an action on a button in a Swing window
button.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        System.out.println("Some actions...");
    }
});

// Using lambdas
button.addActionListener((e) -> {
    System.out.println("Some actions...");
});

Fonctions génériques

Les Lambdas peuvent être utilisés dans des fonctions génériques pour résoudre des problèmes en passant des expressions lambda comme paramètres.

public class Main {
    /*
    * A method that tests a condition
    */
    public static void testExpression(List<String> list, Predicate<String> predicate) {
        list.forEach(n -> {
            if (predicate.test(n)) {
                System.out.println(n);
            }
        });
    }

    /*
    * Calling the method with a lambda
    */
    public static void main(String[] args) {
        List<String> list = Arrays.asList("João", "Ana", "Maria", "Cesar");
        // Prints "Cesar" if it exists
        testExpression(list, (n) -> StringUtils.equals("Cesar", n));
        // Prints the entire list
        testExpression(list, (n) -> true);
        // Prints nothing
        testExpression(list, (n) -> false);
    }
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn