Java 8 Lambda 運算式

來源:互聯網
上載者:User

標籤:interface   rate   get   pre   lam   blank   tin   引用   文法   

內容來源於菜鳥教程(侵刪)

 

Lambda 運算式,也可稱為閉包,它是推動 Java 8 發布的最重要新特性。

Lambda 允許把函數作為一個方法的參數(函數作為參數傳遞進方法中)。

使用 Lambda 運算式可以使代碼變的更加簡潔緊湊。

文法

lambda 運算式的文法格式如下:

(parameters) -> expression 或 (parameters) ->{ statements; }

以下是lambda運算式的重要特徵:

  • 可選型別宣告:不需要聲明參數類型,編譯器可以統一識別參數值。
  • 可選的參數圓括弧:一個參數無需定義圓括弧,但多個參數需要定義圓括弧。
  • 可選的大括弧:如果主體包含了一個語句,就不需要使用大括弧。
  • 可選的返回關鍵字:如果主體只有一個運算式傳回值則編譯器會自動傳回值,大括弧需要指定明運算式返回了一個數值。
Lambda 運算式執行個體

在 Java8Tester.java 檔案輸入以下代碼:

Java8Tester.java 檔案
public class Java8Tester {     public static void main(String args[]){         Java8Tester tester = new Java8Tester();         // 型別宣告         MathOperation addition = (int a, int b) -> a + b;         // 不用型別宣告         MathOperation subtraction = (a, b) -> a - b;         // 大括弧中的返回語句         MathOperation multiplication = (int a, int b) -> { return a * b; };         // 沒有大括弧及返回語句         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));         // 不用括弧         GreetingService greetService1 = message -> System.out.println("Hello " + message);         // 用括弧        GreetingService greetService2 = (message) -> System.out.println("Hello " + message);        greetService1.sayMessage("Runoob");        greetService2.sayMessage("Google");     }     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 Java8Tester.java $ java Java8Tester10 + 5 = 1510 - 5 = 510 x 5 = 5010 / 5 = 2Hello RunoobHello Google

使用 Lambda 運算式需要注意以下兩點:

  • Lambda 運算式主要用來定義行內執行的方法類型介面,例如,一個簡單方法介面。在上面例子中,我們使用各種類型的Lambda運算式來定義MathOperation介面的方法。然後我們定義了sayMessage的執行。
  • Lambda 運算式免去了使用匿名方法的麻煩,並且給予Java簡單但是強大的函數化的編程能力。
變數範圍

lambda 運算式只能引用 final 或 final 局部變數,這就是說不能在 lambda 內部修改定義在域外的局部變數,否則會編譯錯誤。

在 Java8Tester.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("Runoob");     }     interface GreetingService {         void sayMessage(String message);     } }    

執行以上指令碼,輸出結果為:

$ javac Java8Tester.java $ java Java8TesterHello! Runoob

 

Java 8 Lambda 運算式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.