JAVA Lambda表達式

在JAVA中,「Lambda 表達式」(Lambda expression)是一個抽象方法的實現。這個抽象方法必須是在接口中聲明的,並且實現類只須要實現這一個抽象方法,咱們稱這種接口爲函數式接口。Lambda表達式就是函數式接口的實現,來完成對數據的處理。java

基本函數的格式

JAVA函數一般是咱們類中定義的行爲,格式以下:express

修飾符 返回類型 函數名(參數列表){
    語句塊
    return 返回值;
}
  • 修飾符:函數的可見性,決定函數的使用範圍
  • 返回類型:函數的輸出信息,與return配合使用
  • 函數名:函數標識
  • 參數列表:函數的輸入信息
  • 語句塊:函數執行的操做

這就是函數的基本格式。
代碼中函數名,返回類型是必定要有的,其餘的無關緊要。
因此代碼中最簡單的函數定義格式以下:編程

返回類型 函數名();

Lambda表達式格式

咱們說Lambda表達式是一個匿名函數,那咱們來看一下Lambda表達式的格式。閉包

(參數列表) -> {語句塊}
  • 參數列表:函數的輸入信息
  • ->: Lambda表達式關鍵符(也能夠理解成關鍵字)
  • 語句塊:函數執行的操做

「->」是必須有的,咱們來看下最簡單的Lambda表達式結構:函數式編程

() -> {}

Lambda表達式是一個表達式,程序中被做爲一個值來使用。JAVA語言是強類型面向對象的語言,因此必須提供一種數據類型做爲Lambda表達式的返回值類型、符合JAVA中函數格式的定義、符合面向對象規則,因此最終Lambda表達式要有一個映射成JAVA對象的過程。函數

函數式接口

函數式接口是用來完成Lambda表達式映射成JAVA對象的一種接口,確切的說把接口中僅存的一個抽象方法和Lambda表達式綁定並完成對象的實例化。code

那麼接口是如何與Lambda表達式創建類型關係的?對象

接口的抽象方法。下面舉例說明。接口

定一個函數式接口io

/**
 * @author Stephen Yue
 */
public interface Nothing {
    void doNothing();
}

咱們在接口裏定義了一個沒有參數、返回值的抽象方法。

接口咱們定義好了,須要咱們定義接口的實現方式。咱們選取Lambda表達式來完成這個實現。

// 指定接口中方法的實現過程並建立對象
Nothing nothing = () -> {};
nothing.doNothing();

給Nothing接口中doNothing方法指定了一個空實現的Lambda表達式。即沒有參數、沒有返回值、什麼都不作的一個空實現。因此執行以後沒有任何結果。咱們改一下實現方式。

Nothing nothing = () -> {
        System.out.println("hello Lambda!");
    };
nothing.doNothing();

新的Lambda表達式實現一樣符合接口中抽象方法定義的要求,不過程序執行完,會在控制檯輸出:hello Lambda!

總結

Lambda表達式的出現,提供了新的接口實現方式。接口中抽象方法名字是Lambda表達式的標識符,接口中參數類型對應Lambda表達式的參數類型,接口中返回類型對應Lambda表達式返回類型,Lambda表達式的語句塊來完成抽象方法的邏輯實現。

Lambda表達式的優勢:

  1. 簡碼
  2. 面向函數式編程(也能夠理解面向接口編程)
  3. 閉包
相關文章
相關標籤/搜索