1. 程式人生 > 其它 >Java8:函式式介面、lambda、Stream

Java8:函式式介面、lambda、Stream

函式式介面(Functional Interface)就是一個有且僅有一個抽象方法,但是可以有多個非抽象方法的介面。

 

java.util.function 它包含了很多介面,用來支援 Java的函數語言程式設計。
該包下有四大類函式式介面:Supplier、Consumer、Predicate、Funcation。
Supplier(供給型):無參,有返回值(泛型物件)。
Consumer(消費型):有參(泛型物件),無返回值。
Predicate(斷言型):有參(泛型物件),有返回值(布林)。
Funcation(方法型):有參(泛型物件),有返回值(泛型物件)。

 

我們很少去定義一個方法,方法引數包含函式介面。


我們更重要的是學會使用 JDk8 中帶有函式式介面引數的方法,來簡化我們的程式碼。

  

函式的具體實現則由呼叫者來實現,這就是函式式介面的意義所在。

 

 ------------------------------------------------------------------------------------------

Lambda表示式來表示函式式介面的一個實現。(注:JAVA 8 之前一般是用匿名類實現的)

  

lambda表示式的重要特徵:
(1)可選型別宣告:不需要宣告引數型別,編譯器可以統一識別引數值。
(2)可選的引數圓括號:一個引數無需定義圓括號,但多個引數需要定義圓括號。


(3)可選的大括號:如果主體包含了一個語句,就不需要使用大括號。
(4)可選的返回關鍵字:如果主體只有一個表示式返回值則編譯器會自動返回值,大括號需要指定表示式返回了一個數值。

 

------------------------------------------------------------------------------------------

函式式介面 是 lambda 的基礎。
lambda 是 Stream API 的基礎。
Stream API 是一種高效且易於使用的處理資料的方式。
使用 Stream API 對集合資料進行操作,就類似於使用 SQL 執行的資料庫查詢

 ------------------------------------------------------------------------------------------

參考:
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