Java8需要知道的4個函數(shù)式接口簡單教程
什么是函數(shù)是接口?
函數(shù)式接口是一個包含 單個抽象方法 的接口,且可以有任意多個默認方法或靜態(tài)方法。為了增強可讀性,Java 8 引入了 @FunctionalInterface 注解,用于標識該接口是一個函數(shù)式接口,編譯器會幫助我們檢查是否符合函數(shù)式接口的規(guī)范。
今天我們還講講Consumer、Supplier、Predicate、Function這幾個接口的用法,在 Java8 的用法當中,這幾個接口雖然沒有明目張膽的使用,但是,卻是潤物細無聲,在許多框架,工具類,方法參數(shù)都頻頻出現(xiàn)。
這幾個接口都在java.util.function包下的,分別是
Consumer(消費型)supplier(供給型)predicate(謂詞型)function(功能性)
Consumer
Consumer 是 Java 8 中引入的一個函數(shù)式接口,位于 java.util.function 包中,主要用于表示一個接受單個輸入?yún)?shù)但沒有返回值的操作(類似于執(zhí)行某種“消費”行為)。
可以理解為:參數(shù)被消費了,石沉大海了
接口定義

- 泛型 T:表示輸入的參數(shù)類型。
- accept(T t) 方法:定義了消費操作。
核心特點
- 單輸入、無返回值:適用于只需要處理輸入而不需要返回結(jié)果的場景。
- 支持鏈式調(diào)用:通過
andThen方法可以組合多個Consumer。
注意事項
不可變性:Consumer沒有返回值,因此不能直接將結(jié)果傳遞給下一個操作
慎用副作用:避免在Consumer中引入全局變量修改等副作用代碼
常見用法
1.基本用法


2.結(jié)合andThen鏈式調(diào)用
功能:按順序組合兩個 Consumer,前一個完成后調(diào)用下一個。


3.結(jié)合集合操作
Consumer 常用于集合元素的處理。


4.與forEach結(jié)合
Consumer 是 forEach 的核心參數(shù)類型:


5.結(jié)合Stream API
Consumer 可用于 Stream 中的終端操作 forEach:


6.自定義操作
Consumer 可用于封裝復雜邏輯:


Supplier
Supplier 接口是 Java 8 引入的一個函數(shù)式接口,屬于 java.util.function 包。它的主要作用是提供一個沒有輸入?yún)?shù)的結(jié)果。Supplier 接口的核心方法是 get(),該方法用于返回一個結(jié)果。
理解:空手套白狼,只索取,不付出,供給型接口
接口定義

get()方法,可以看到,是return一個變量

常見用法
1.基本用法
可以通過 Lambda 表達式或方法引用來創(chuàng)建 Supplier 實例。


2.與Stream API結(jié)合使用
Supplier 可以與 Java Stream API 結(jié)合使用,生成流中的元素。


3.作為方法參數(shù)
Supplier 可以作為方法參數(shù)傳遞,允許調(diào)用者定義生成對象的邏輯。


4.結(jié)合Optional使用
Optional<String> optionalString = Optional.ofNullable(null); String result = optionalString.orElseGet(() -> "Default Value"); System.out.println(result); // 輸出: Default Value
predicate
Predicate 接口是 Java 8 引入的一個函數(shù)式接口,位于 java.util.function 包中。它的主要作用是用于測試某個條件,返回布爾值。Predicate 接口定義了一個抽象方法 test,接受一個輸入?yún)?shù)并返回一個布爾值。
接口定義

常見用法
1.基本用法


2.組合Predicate API
Predicate接口還提供了幾個默認方法,允許組合多個Predicate實例
and(Predicate other): 連接兩個Predicate,只有在兩個Predicate都為true時,結(jié)果才為true。or(Predicate other): 連接兩個Predicate,只要其中一個為true,結(jié)果就為true。negate(): 反轉(zhuǎn)Predicate的結(jié)果。


3.用于過濾集合
Predicate常用于集合的過濾操作,特別是與 Stream API 配合使用。你可以使用 filter 方法對集合進行篩選。


4.自定義Predicate
也可以創(chuàng)建自己的 Predicate 實現(xiàn)


function
Java 8 中的 Function<T, R> 接口是四大核心函數(shù)式接口之一,它用于表示接收一個類型為 T 的參數(shù)并返回類型為 R 的結(jié)果的操作。
接口定義

常用方法
1.基本用法


2.組合Function API
Function 接口提供了兩個常用的默認方法:andThen() 和 compose(),還有identity(),可以用來組合多個函數(shù)
andThen() 方法用來鏈式調(diào)用
compose() 方法與 andThen() 的區(qū)別在于它先應用傳入的 Function,再應用當前的 Function
一句話總結(jié):這倆方法是相反的


identity() 方法返回一個始終返回其輸入?yún)?shù)的函數(shù)
identity() 方法在流的處理過程中也有應用,尤其是當我們希望原樣返回一個對象時非常有用。
Function<Integer, Integer> identityFunction = Function.identity(); System.out.println(identityFunction.apply(10)); // 輸出 10
3.與其他函數(shù)式接口組合
Function 接口常常與其他函數(shù)式接口配合使用,特別是在流(Streams)處理時,能夠大大提升代碼的簡潔性和可讀性。


List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "Dave", "Eve");
List<String> longNames = names.stream()
.filter(name -> name.length() > 3) // 先篩選長度大于 3 的名字
.map(name -> name.toUpperCase()) // 將符合條件的名字轉(zhuǎn)成大寫
.collect(Collectors.toList());
System.out.println(longNames); // 輸出 [ALICE, CHARLIE, DAVE]總結(jié)
到此這篇關(guān)于Java8需要知道的4個函數(shù)式接口的文章就介紹到這了,更多相關(guān)Java8函數(shù)式接口內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot3集成ElasticSearch的方法詳解
Elasticsearch是一個分布式、RESTful風格的搜索和數(shù)據(jù)分析引擎,適用于各種數(shù)據(jù)類型,數(shù)字、文本、地理位置、結(jié)構(gòu)化數(shù)據(jù)、非結(jié)構(gòu)化數(shù)據(jù),本文給大家詳解介紹了SpringBoot3集成ElasticSearch的方法,需要的朋友可以參考下2023-08-08
Jpa中Specification的求和sum不生效原理分析
這篇文章主要為大家介紹了Jpa中Specification的求和sum不生效原理示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-08-08
Java System.getProperty()-獲取系統(tǒng)參數(shù)案例詳解
這篇文章主要介紹了Java System.getProperty()-獲取系統(tǒng)參數(shù)案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下2021-08-08
SpringBoot使用自定義注解實現(xiàn)權(quán)限攔截的示例
本篇文章主要介紹了SpringBoot使用自定義注解實現(xiàn)權(quán)限攔截的示例,具有一定的參考價值,有興趣的可以了解一下2017-09-09

