Java 8 - Lambda-expressies
Lambda-expressies zijn geïntroduceerd in Java 8 en worden aangeprezen als de grootste functie van Java 8. Lambda-expressie vergemakkelijkt functioneel programmeren en vereenvoudigt de ontwikkeling aanzienlijk.
Syntaxis
Een lambda-expressie wordt gekenmerkt door de volgende syntaxis.
parameter -> expression body
Hieronder volgen de belangrijke kenmerken van een lambda-expressie.
-
Optioneel type aangifte − U hoeft het type van een parameter niet aan te geven. De compiler kan hetzelfde afleiden uit de waarde van de parameter.
-
Optioneel haakje rond parameter − U hoeft geen enkele parameter tussen haakjes te declareren. Voor meerdere parameters zijn haakjes vereist.
-
Optionele accolades − Het is niet nodig om accolades te gebruiken in de hoofdtekst van de expressie als de hoofdtekst één enkele instructie bevat.
-
Optioneel retourzoekwoord − De compiler retourneert automatisch de waarde als de hoofdtekst een enkele expressie heeft om de waarde te retourneren. Krullende accolades zijn vereist om aan te geven dat de uitdrukking een waarde retourneert.
Voorbeeld van Lambda-uitdrukkingen
Maak het volgende Java-programma met een editor naar keuze, bijvoorbeeld C:\> JAVA.
Java8Tester.java
Live demopublic 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); } }
Verifieer het resultaat
Stel de klas samen met javac compiler als volgt −
C:\JAVA>javac Java8Tester.java
Voer nu de Java8Tester als volgt uit −
C:\JAVA>java Java8Tester
Het zou de volgende output moeten produceren −
10 + 5 = 15 10 - 5 = 5 10 x 5 = 50 10 / 5 = 2 Hello Mahesh Hello Suresh
Hieronder volgen de belangrijke punten waarmee rekening moet worden gehouden in het bovenstaande voorbeeld.
-
Lambda-expressies worden voornamelijk gebruikt om inline-implementatie van een functionele interface te definiëren, d.w.z. een interface met slechts één methode. In het bovenstaande voorbeeld hebben we verschillende soorten lambda-expressies gebruikt om de bewerkingsmethode van de MathOperation-interface te definiëren. Vervolgens hebben we de implementatie van sayMessage of GreetingService gedefinieerd.
-
Lambda-expressie elimineert de noodzaak van anonieme klasse en geeft Java een zeer eenvoudige maar krachtige functionele programmeermogelijkheid.
Reikwijdte
Met behulp van lambda-expressie kunt u verwijzen naar elke laatste variabele of effectief laatste variabele (die slechts één keer wordt toegewezen). Lambda-expressie genereert een compilatiefout als aan een variabele de tweede keer een waarde wordt toegewezen.
Bereikvoorbeeld
Maak het volgende Java-programma met een editor naar keuze, bijvoorbeeld C:\> JAVA.
Java8Tester.java
Live demopublic 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); } }
Verifieer het resultaat
Stel de klas samen met javac compiler als volgt −
C:\JAVA>javac Java8Tester.java
Voer nu de Java8Tester als volgt uit −
C:\JAVA>java Java8Tester
Het zou de volgende output moeten produceren −
Hello! Mahesh
Java