Java8:函數式接口、Lambda、Stream
函數式接口(Functional Interface)就是一個有且僅有一個抽象方法,但是可以有多個非抽象方法的接口。
java.util.function 它包含了很多接口,用來支持 Java的函數式編程。
該包下有四大類函數式接口:Supplier、Consumer、Predicate、Funcation。
Supplier(供給型):無參,有返回值(泛型對象)。
Consumer(消費型):有參(泛型對象),無返回值。
Predicate(斷言型):有參(泛型對象),有返回值(布爾)。
Funcation(方法型):有參(泛型對象),有返回值(泛型對象)。
函數的具體實現則由調用者來實現,這就是函數式接口的意義所在。
------------------------------------------------------------------------------------------
Lambda表達式來表示函數式接口的一個實現。(注:JAVA 8 之前一般是用匿名類實現的)
Lambda表達式的重要特征:
(1)可選類型聲明:不需要聲明參數類型,編譯器可以統一識別參數值。
(2)可選的參數圓括號:一個參數無需定義圓括號,但多個參數需要定義圓括號。
(3)可選的大括號:如果主體包含了一個語句,就不需要使用大括號。
(4)可選的返回關鍵字:如果主體只有一個表達式返回值則編譯器會自動返回值,大括號需要指定表達式返回了一個數值。
------------------------------------------------------------------------------------------
函數式接口 是 Lambda 的基礎。
Lambda 是 Stream API 的基礎。
Stream API 是一種高效且易于使用的處理數據的方式。
使用 Stream API 對集合數據進行操作,就類似于使用 SQL 執行的數據庫查詢
我們很少去定義一個方法,方法參數包含函數接口。
我們更重要的是學會使用 JDk8 中帶有函數式接口參數的方法,來簡化我們的代碼。
------------------------------------------------------------------------------------------
參考:
Java 8 函數式接口
https://www.runoob.com/java/java8-functional-interfaces.html
https://my.oschina.net/mdxlcj/blog/4819554
https://mp.weixin.qq.com/s/JGI9eAgjus-XoY-40z7DkQ
Java Lambda 表達式
https://www.runoob.com/java/java8-lambda-expressions.html
玩轉Java8 Stream
https://mp.weixin.qq.com/s/477FjfZOp2_gY48kRav1fg
JDK8 新特性詳解
https://my.oschina.net/mdxlcj/blog/1622718
https://my.oschina.net/mdxlcj?tab=newest&catalogId=6361172

浙公網安備 33010602011771號