在JAVA中,「Lambda 表達式」(Lambda expression)是一個抽象方法的實現。這個抽象方法必須是在接口中聲明的,並且實現類只須要實現這一個抽象方法,咱們稱這種接口爲函數式接口。Lambda表達式就是函數式接口的實現,來完成對數據的處理。java
JAVA函數一般是咱們類中定義的行爲,格式以下:express
修飾符 返回類型 函數名(參數列表){ 語句塊 return 返回值; }
這就是函數的基本格式。
代碼中函數名,返回類型是必定要有的,其餘的無關緊要。
因此代碼中最簡單的函數定義格式以下:編程
返回類型 函數名();
咱們說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表達式的優勢: