Java 8 - Expressions lambda
Les expressions lambda sont introduites dans Java 8 et sont présentées comme la plus grande fonctionnalité de Java 8. L'expression lambda facilite la programmation fonctionnelle et simplifie beaucoup le développement.
Syntaxe
Une expression lambda est caractérisée par la syntaxe suivante.
parameter -> expression body
Voici les caractéristiques importantes d'une expression lambda.
-
Déclaration de type facultative − Inutile de déclarer le type d'un paramètre. Le compilateur peut déduire la même chose à partir de la valeur du paramètre.
-
Parenthèse facultative autour du paramètre − Inutile de déclarer un seul paramètre entre parenthèses. Pour plusieurs paramètres, des parenthèses sont requises.
-
Accolades facultatives − Pas besoin d'utiliser des accolades dans le corps de l'expression si le corps contient une seule instruction.
-
Mot clé de retour facultatif − Le compilateur renvoie automatiquement la valeur si le corps a une seule expression pour renvoyer la valeur. Des accolades sont nécessaires pour indiquer que l'expression renvoie une valeur.
Exemple d'expression Lambda
Créez le programme Java suivant à l'aide de l'éditeur de votre choix dans, par exemple, C:\> JAVA.
Java8Tester.java
Démo en directpublic class Java8Tester { public static void main(String args[]) { Java8Tester tester = new Java8Tester(); //with type declaration MathOperation addition = (int a, int b) -> a + b; //with out type declaration MathOperation subtraction = (a, b) -> a - b; //with return statement along with curly braces MathOperation multiplication = (int a, int b) -> { return a * b; }; //without return statement and without curly braces MathOperation division = (int a, int b) -> a / b; System.out.println("10 + 5 = " + tester.operate(10, 5, addition)); System.out.println("10 - 5 = " + tester.operate(10, 5, subtraction)); System.out.println("10 x 5 = " + tester.operate(10, 5, multiplication)); System.out.println("10 / 5 = " + tester.operate(10, 5, division)); //without parenthesis GreetingService greetService1 = message -> System.out.println("Hello " + message); //with parenthesis GreetingService greetService2 = (message) -> System.out.println("Hello " + message); greetService1.sayMessage("Mahesh"); greetService2.sayMessage("Suresh"); } interface MathOperation { int operation(int a, int b); } interface GreetingService { void sayMessage(String message); } private int operate(int a, int b, MathOperation mathOperation) { return mathOperation.operation(a, b); } }
Vérifier le résultat
Compilez la classe en utilisant javac compilateur comme suit −
C:\JAVA>javac Java8Tester.java
Exécutez maintenant le Java8Tester comme suit −
C:\JAVA>java Java8Tester
Il devrait produire la sortie suivante −
10 + 5 = 15 10 - 5 = 5 10 x 5 = 50 10 / 5 = 2 Hello Mahesh Hello Suresh
Voici les points importants à prendre en compte dans l'exemple ci-dessus.
-
Les expressions lambda sont principalement utilisées pour définir l'implémentation en ligne d'une interface fonctionnelle, c'est-à-dire une interface avec une seule méthode. Dans l'exemple ci-dessus, nous avons utilisé différents types d'expressions lambda pour définir la méthode d'opération de l'interface MathOperation. Ensuite, nous avons défini l'implémentation de sayMessage de GreetingService.
-
L'expression Lambda élimine le besoin d'une classe anonyme et donne une capacité de programmation fonctionnelle très simple mais puissante à Java.
Portée
À l'aide de l'expression lambda, vous pouvez faire référence à n'importe quelle variable finale ou à une variable effectivement finale (qui n'est affectée qu'une seule fois). L'expression Lambda génère une erreur de compilation, si une variable se voit attribuer une valeur la deuxième fois.
Exemple de portée
Créez le programme Java suivant à l'aide de l'éditeur de votre choix dans, par exemple, C:\> JAVA.
Java8Tester.java
Démo en directpublic class Java8Tester { final static String salutation = "Hello! "; public static void main(String args[]) { GreetingService greetService1 = message -> System.out.println(salutation + message); greetService1.sayMessage("Mahesh"); } interface GreetingService { void sayMessage(String message); } }
Vérifier le résultat
Compilez la classe en utilisant javac compilateur comme suit −
C:\JAVA>javac Java8Tester.java
Exécutez maintenant le Java8Tester comme suit −
C:\JAVA>java Java8Tester
Il devrait produire la sortie suivante −
Hello! Mahesh
Java