鍍金池/ 教程/ Java/ Java8 Lambda表達(dá)式
Java8數(shù)據(jù)流
Java8默認(rèn)方法
Java8 Optional類
Java8 Base64
Java8期間及持續(xù)時(shí)間
Java8函數(shù)式接口
Java8 日期時(shí)間API
Java8 本地DateTime API
Java8教程
Java8 Lambda表達(dá)式
Java8環(huán)境設(shè)置
Java8向后兼容
Java8 時(shí)間調(diào)節(jié)器
Java8 ChronoUnits枚舉
Java8方法引用
Java8 Nashorn JavaScript引擎
Java8 時(shí)區(qū)DateTime API

Java8 Lambda表達(dá)式

Lambda表達(dá)式是在Java8中引入的,并號(hào)稱是Java8的最大的特點(diǎn). Lambda表達(dá)式有利于函數(shù)式編程,簡(jiǎn)化了開發(fā)了很多。

語法

lambda表達(dá)式的特點(diǎn),它的語法如下面。

parameter -> expression body

下面是一個(gè)lambda表達(dá)式的重要特征。

  • 可選類型聲明 - 無需聲明參數(shù)的類型。編譯器可以從該參數(shù)的值推斷。

  • 可選圓括號(hào)參數(shù) - 無需在括號(hào)中聲明參數(shù)。對(duì)于多個(gè)參數(shù),括號(hào)是必需的。

  • 可選大括號(hào) - 表達(dá)式主體沒有必要使用大括號(hào),如果主體中含有一個(gè)單獨(dú)的語句。

  • 可選return關(guān)鍵字 - 編譯器會(huì)自動(dòng)返回值,如果主體有一個(gè)表達(dá)式返回的值。花括號(hào)是必需的,以表明表達(dá)式返回一個(gè)值。

示例

使用所選擇的任何編輯器創(chuàng)建下面的java程序 C:/> 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));

      //with parenthesis
      GreetingService greetService1 = message -> System.out.println("Hello " + message);

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

驗(yàn)證結(jié)果

使用javac編譯器編譯如下類

C:\JAVA>javac Java8Tester.java

現(xiàn)在運(yùn)行Java8Tester看到的如下:

C:\JAVA>java Java8Tester

看到結(jié)果如下:

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

以下是對(duì)使用上述例子認(rèn)為是重要的觀點(diǎn)。

  • lambda表達(dá)式主要用于定義內(nèi)聯(lián)執(zhí)行的功能的接口,即只有一個(gè)單一的方法接口。在上面的例子中,我們使用不同類型的lambda表達(dá)式定義MathOperation接口的opearation方法。然后,我們定義GreetingService的sayMessage實(shí)現(xiàn)。

  • Lambda表達(dá)式消除匿名類的需求,并給出了一個(gè)非常簡(jiǎn)單但功能強(qiáng)大的函數(shù)式編程能力。

變量的作用域

在lambda表達(dá)式,可以指任何最終的變量或有效的最后一個(gè)變量(被分配一次)。如果變量被二次賦值,lambda表達(dá)式將拋出編譯錯(cuò)誤。

作用域示例

選擇使用任何編輯器創(chuàng)建以下java程序在 C:/> JAVA

Java8Tester.java
public class 上一篇:Java8向后兼容下一篇:Java8 本地DateTime API