Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> Java

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 demo
public 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 demo
public 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

  1. Java-operators
  2. Java-uitdrukkingen, verklaringen en blokken
  3. Java-opmerkingen
  4. Java voor elke lus
  5. Java-strings
  6. Java-interface
  7. Java anonieme klasse
  8. Java proberen-met-bronnen
  9. Java-annotaties
  10. Java-beweringen
  11. Java-vector