Dating Java8系列之Lambda表達式和函數式接口(上)

翎野君/文

 

圖片

 

圖片

Lambda簡介

 

我們可以把Lambda表達式理解爲簡潔地表示可傳遞的匿名函數的一種方式。它沒有名稱,但它有參數列表、函數主體、返回類型,可能還有一個可以拋出的異常列表。

  • 匿名:我們說匿名,是因爲它不像普通的方法那樣有一個明確的名稱。

  • 函數:我們說它是函數,是因爲Lambda函數不像方法那樣屬於某個特定的類。但和方法一樣,Lambda有參數列表、函數主體、返回類型,還可能有可以拋出的異常列表。

  • 傳遞:Lambda表達式可以作爲參數傳遞給方法或存儲在變量中。 

  • 簡潔:無需像匿名類那樣寫很多模板代碼。

 

 

圖片

如何使用Lambda

 

Lambda的基本語法是

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

示例:

(Apple a1, Apple a2) -> a1.getWeight().compareTo(a2.getWeight());

 

Lambda表達式由三部分組成

  • 參數列表:這裏它採用了Comparator中compare方法的參數,兩個Apple。

  • 箭頭:箭頭->把參數列表與Lambda主體分隔開。

  • Lambda主體:比較兩個Apple的重量。表達式就是Lambda的返回值了。 

 

 

圖片

函數式接口

 

什麼是函數式接口?

一言以蔽之,函數式接口就是隻定義一個抽象方法的接口。 

可以在函數式接口上使用Lambda表達式。

 

函數式接口可以做什麼?

Lambda表達式允許我們直接以,內聯的形式,爲函數式接口的抽象方法,提供實現。並把整個表達式作爲函數式接口的實例。

簡單來說,Lambda就是函數式接口的一個具體實現的實例

 

 

圖片

函數描述符

 

函數式接口的抽象方法的簽名基本上就是Lambda表達式的簽名。我們將這種抽象方法叫作函數描述符。

例如,Runnable接口可以看作一個什麼也不接受什麼也不返回(void)的函數簽名,因爲它只有一個叫作run的抽象方法,這個方法什麼也不接受,什麼也不返回(void)。

() -> void代表了參數列表爲空,且返回void的函數。 

public void process(Runnable r){        r.run();}

 

process(() -> System.out.println("This is awesome!!”));

函數簽名相匹配,所以這個是可以正確執行的。

 

 

圖片

@FunctionalInterface

 

@FunctionalInterface這個標註用於表示該接口會設計成一個函數式接口

請注意,@FunctionalInterface不是必需的,但對於爲此設計的接口而言,使用它是比較好的做法。它就像是@Override標註,表示方法被重寫了。

 

 

作者:翎野君
博客:https://www.cnblogs.com/lingyejun/

 

本篇文章如有幫助到您,請給「翎野君」點個贊,感謝您的支持。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章