函數語言程式設計 - Lambda 表示式



Lambda 表示式是在 Java 8 中引入的,被譽為 Java 8 最重要的特性之一。Lambda 表示式促進了函數語言程式設計,並大大簡化了開發。

語法

Lambda 表示式的語法特徵如下。

parameter -> expression body

以下是 Lambda 表示式的重要特徵。

  • 可選型別宣告 − 無需宣告引數的型別。編譯器可以從引數的值中推斷出型別。

  • 引數周圍可選的圓括號 − 無需為單個引數宣告圓括號。對於多個引數,需要使用圓括號。

  • 可選的花括號 − 如果表示式體包含單個語句,則無需使用花括號。

  • 可選的 return 關鍵字 − 如果表示式體只有一個表示式用於返回值,則編譯器會自動返回值。需要使用花括號來指示表示式返回值。

Lambda 表示式示例

使用您選擇的任何編輯器在,例如,C:\> JAVA 中建立以下 Java 程式。

Java8Tester.java

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);
   }
}

驗證結果

使用javac編譯器編譯類,如下所示 −

C:\JAVA>javac Java8Tester.java

現在執行 Java8Tester,如下所示 −

C:\JAVA>java Java8Tester

它應該產生以下輸出 −

10 + 5 = 15
10 - 5 = 5
10 x 5 = 50
10 / 5 = 2
Hello Mahesh
Hello Suresh

以下是在上述示例中需要考慮的重要事項。

  • Lambda 表示式主要用於定義函式式介面的內聯實現,即只有一個方法的介面。在上面的示例中,我們使用了各種型別的 Lambda 表示式來定義 MathOperation 介面的 operation 方法。然後我們定義了 GreetingService 的 sayMessage 方法的實現。

  • Lambda 表示式消除了對匿名類的需求,併為 Java 提供了一種非常簡單但功能強大的函數語言程式設計能力。

作用域

使用 Lambda 表示式,您可以引用任何 final 變數或有效 final 變數(僅賦值一次)。如果變數第二次被賦值,則 Lambda 表示式會丟擲編譯錯誤。

作用域示例

使用您選擇的任何編輯器在,例如,C:\> JAVA 中建立以下 Java 程式。

Java8Tester.java

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);
   }
}

驗證結果

使用javac編譯器編譯類,如下所示 −

C:\JAVA>javac Java8Tester.java

現在執行 Java8Tester,如下所示 −

C:\JAVA>java Java8Tester

它應該產生以下輸出 −

Hello! Mahesh
廣告

© . All rights reserved.