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/
本篇文章如有幫助到您,請給「翎野君」點個贊,感謝您的支持。