Maison > Java > javaDidacticiel > le corps du texte

Lambda en Java

Barbara Streisand
Libérer: 2024-11-19 16:38:03
original
442 Les gens l'ont consulté

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)
Copier après la connexion

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;
Copier après la connexion

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

(int x, int y) -> { return x * y; }
Copier après la connexion

Peut s'écrire :

(int x, int y) -> return x * y;
Copier après la connexion

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; }
Copier après la connexion
  1. Fonction avec paramètres (sans types déclarés) :
   (x, y) -> { return x * y; }
Copier après la connexion
  1. Fonction sans paramètres :
   () -> System.out.println(new Date());
Copier après la connexion

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

(a) -> this.x = a;
Copier après la connexion

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();
Copier après la connexion

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));
Copier après la connexion

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...");
});
Copier après la connexion

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);
    }
}
Copier après la connexion

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!

source:dev.to
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal