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)
(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.
(int x, int y) -> { return x * y; }
(x, y) -> { return x * y; }
() -> 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.
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();
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));
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..."); });
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!