Java8需要知道的4個(gè)函數(shù)式接口簡(jiǎn)單教程
什么是函數(shù)是接口?
函數(shù)式接口是一個(gè)包含 單個(gè)抽象方法 的接口,且可以有任意多個(gè)默認(rèn)方法或靜態(tài)方法。為了增強(qiáng)可讀性,Java 8 引入了 @FunctionalInterface 注解,用于標(biāo)識(shí)該接口是一個(gè)函數(shù)式接口,編譯器會(huì)幫助我們檢查是否符合函數(shù)式接口的規(guī)范。
今天我們還講講Consumer、Supplier、Predicate、Function
這幾個(gè)接口的用法,在 Java8 的用法當(dāng)中,這幾個(gè)接口雖然沒有明目張膽的使用,但是,卻是潤(rùn)物細(xì)無(wú)聲,在許多框架,工具類,方法參數(shù)都頻頻出現(xiàn)。
這幾個(gè)接口都在java.util.function
包下的,分別是
Consumer(消費(fèi)型)
supplier(供給型)
predicate(謂詞型)
function(功能性)
Consumer
Consumer
是 Java 8 中引入的一個(gè)函數(shù)式接口,位于 java.util.function
包中,主要用于表示一個(gè)接受單個(gè)輸入?yún)?shù)但沒有返回值的操作(類似于執(zhí)行某種“消費(fèi)”行為)。
可以理解為:參數(shù)被消費(fèi)了,石沉大海了
接口定義
- 泛型 T:表示輸入的參數(shù)類型。
- accept(T t) 方法:定義了消費(fèi)操作。
核心特點(diǎn)
- 單輸入、無(wú)返回值:適用于只需要處理輸入而不需要返回結(jié)果的場(chǎng)景。
- 支持鏈?zhǔn)秸{(diào)用:通過
andThen
方法可以組合多個(gè)Consumer
。
注意事項(xiàng)
不可變性:Consumer沒有返回值,因此不能直接將結(jié)果傳遞給下一個(gè)操作
慎用副作用:避免在Consumer中引入全局變量修改等副作用代碼
常見用法
1.基本用法
2.結(jié)合andThen鏈?zhǔn)秸{(diào)用
功能:按順序組合兩個(gè) Consumer
,前一個(gè)完成后調(diào)用下一個(gè)。
3.結(jié)合集合操作
Consumer
常用于集合元素的處理。
4.與forEach結(jié)合
Consumer
是 forEach
的核心參數(shù)類型:
5.結(jié)合Stream API
Consumer
可用于 Stream
中的終端操作 forEach
:
6.自定義操作
Consumer
可用于封裝復(fù)雜邏輯:
Supplier
Supplier
接口是 Java 8 引入的一個(gè)函數(shù)式接口,屬于 java.util.function
包。它的主要作用是提供一個(gè)沒有輸入?yún)?shù)的結(jié)果。Supplier
接口的核心方法是 get()
,該方法用于返回一個(gè)結(jié)果。
理解:空手套白狼,只索取,不付出,供給型接口
接口定義
get()方法,可以看到,是return一個(gè)變量
常見用法
1.基本用法
可以通過 Lambda 表達(dá)式或方法引用來創(chuàng)建 Supplier
實(shí)例。
2.與Stream API結(jié)合使用
Supplier
可以與 Java Stream API 結(jié)合使用,生成流中的元素。
3.作為方法參數(shù)
Supplier
可以作為方法參數(shù)傳遞,允許調(diào)用者定義生成對(duì)象的邏輯。
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 引入的一個(gè)函數(shù)式接口,位于 java.util.function
包中。它的主要作用是用于測(cè)試某個(gè)條件,返回布爾值。Predicate
接口定義了一個(gè)抽象方法 test
,接受一個(gè)輸入?yún)?shù)并返回一個(gè)布爾值。
接口定義
常見用法
1.基本用法
2.組合Predicate API
Predicate接口還提供了幾個(gè)默認(rèn)方法,允許組合多個(gè)Predicate實(shí)例
and(Predicate other)
: 連接兩個(gè)Predicate
,只有在兩個(gè)Predicate
都為true
時(shí),結(jié)果才為true
。or(Predicate other)
: 連接兩個(gè)Predicate
,只要其中一個(gè)為true
,結(jié)果就為true
。negate()
: 反轉(zhuǎn)Predicate
的結(jié)果。
3.用于過濾集合
Predicate常用于集合的過濾操作,特別是與 Stream
API 配合使用。你可以使用 filter
方法對(duì)集合進(jìn)行篩選。
4.自定義Predicate
也可以創(chuàng)建自己的 Predicate
實(shí)現(xiàn)
function
Java 8 中的 Function<T, R>
接口是四大核心函數(shù)式接口之一,它用于表示接收一個(gè)類型為 T
的參數(shù)并返回類型為 R
的結(jié)果的操作。
接口定義
常用方法
1.基本用法
2.組合Function API
Function
接口提供了兩個(gè)常用的默認(rèn)方法:andThen()
和 compose()
,還有identity(),可以用來組合多個(gè)函數(shù)
andThen()
方法用來鏈?zhǔn)秸{(diào)用
compose()
方法與 andThen()
的區(qū)別在于它先應(yīng)用傳入的 Function
,再應(yīng)用當(dāng)前的 Function
一句話總結(jié):這倆方法是相反的
identity()
方法返回一個(gè)始終返回其輸入?yún)?shù)的函數(shù)
identity()
方法在流的處理過程中也有應(yīng)用,尤其是當(dāng)我們希望原樣返回一個(gè)對(duì)象時(shí)非常有用。
Function<Integer, Integer> identityFunction = Function.identity(); System.out.println(identityFunction.apply(10)); // 輸出 10
3.與其他函數(shù)式接口組合
Function
接口常常與其他函數(shù)式接口配合使用,特別是在流(Streams)處理時(shí),能夠大大提升代碼的簡(jiǎn)潔性和可讀性。
List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "Dave", "Eve"); List<String> longNames = names.stream() .filter(name -> name.length() > 3) // 先篩選長(zhǎng)度大于 3 的名字 .map(name -> name.toUpperCase()) // 將符合條件的名字轉(zhuǎn)成大寫 .collect(Collectors.toList()); System.out.println(longNames); // 輸出 [ALICE, CHARLIE, DAVE]
總結(jié)
到此這篇關(guān)于Java8需要知道的4個(gè)函數(shù)式接口的文章就介紹到這了,更多相關(guān)Java8函數(shù)式接口內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用Java實(shí)現(xiàn)轉(zhuǎn)換掃描的文檔為可搜索的PDF
這篇文章主要為大家詳細(xì)介紹了如何使用Java實(shí)現(xiàn)轉(zhuǎn)換掃描的文檔為可搜索的PDF,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-12-12SpringBoot2使用WebFlux函數(shù)式編程的方法
這篇文章主要介紹了SpringBoot2使用WebFlux函數(shù)式編程的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-08-08Java實(shí)現(xiàn)文件名倒序排序的技術(shù)指南
在實(shí)際開發(fā)過程中,我們經(jīng)常需要對(duì)文件進(jìn)行操作和處理,一個(gè)常見的需求是按文件名倒序排列文件列表,以便于文件的管理和查找,本文將介紹如何在Java中實(shí)現(xiàn)文件名倒序排序,并提供詳細(xì)的代碼案例,需要的朋友可以參考下2024-08-08springboot+shiro+jwtsession和token進(jìn)行身份驗(yàn)證和授權(quán)
最近和別的軟件集成項(xiàng)目,需要提供給別人接口來進(jìn)行數(shù)據(jù)傳輸,發(fā)現(xiàn)給他token后并不能訪問我的接口,拿postman試了下還真是不行,檢查代碼發(fā)現(xiàn)項(xiàng)目的shiro配置是通過session會(huì)話來校驗(yàn)信息的,修改代碼兼容token和session2024-06-06關(guān)于shiro中部分SpringCache失效問題的解決方法
這篇文章主要給大家介紹了關(guān)于shiro中部分SpringCache失效問題的解決方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-07-07