最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java8需要知道的4個(gè)函數(shù)式接口簡(jiǎn)單教程

 更新時(shí)間:2025年03月05日 11:32:39   作者:AutismBtkrsr  
這篇文章主要介紹了Java?8中引入的函數(shù)式接口,包括Consumer、Supplier、Predicate和Function,以及它們的用法和特點(diǎn),文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下

什么是函數(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)用:通過(guò) 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.基本用法

可以通過(guò) Lambda 表達(dá)式或方法引用來(lái)創(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.用于過(guò)濾集合

Predicate常用于集合的過(guò)濾操作,特別是與 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(),可以用來(lái)組合多個(gè)函數(shù)

andThen() 方法用來(lái)鏈?zhǔn)秸{(diào)用

compose() 方法與 andThen() 的區(qū)別在于它先應(yīng)用傳入的 Function,再應(yīng)用當(dāng)前的 Function

一句話總結(jié):這倆方法是相反的

identity() 方法返回一個(gè)始終返回其輸入?yún)?shù)的函數(shù)

identity() 方法在流的處理過(guò)程中也有應(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中的Comparable接口和Comparator接口核心機(jī)制詳解

    Java中的Comparable接口和Comparator接口核心機(jī)制詳解

    Java中的Comparable和Comparator接口是實(shí)現(xiàn)對(duì)象比較和排序的兩種核心機(jī)制,本文給大家介紹Java中的Comparable接口和Comparator接口區(qū)別,感興趣的朋友一起看看吧
    2025-11-11
  • SpringBoot整合Mybatis Plus實(shí)現(xiàn)基本CRUD的示例代碼

    SpringBoot整合Mybatis Plus實(shí)現(xiàn)基本CRUD的示例代碼

    Mybatis Plus是在Mybatis的基礎(chǔ)上的增強(qiáng),使得我們對(duì)一些基本的CRUD使用起來(lái)更方便,本文主要介紹了SpringBoot整合Mybatis Plus實(shí)現(xiàn)基本CRUD的示例代碼,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-05-05
  • Spring?Boot?中實(shí)現(xiàn)?WebSocket?集群思路詳解

    Spring?Boot?中實(shí)現(xiàn)?WebSocket?集群思路詳解

    本文介紹了如何在SpringBoot中實(shí)現(xiàn)WebSocket集群處理,解決了會(huì)話共享和消息同步問題,通過(guò)分布式存儲(chǔ)(Redis)和消息隊(duì)列(RedisPub/Sub)實(shí)現(xiàn)跨節(jié)點(diǎn)通信,感興趣的朋友跟隨小編一起看看吧
    2025-12-12
  • Java中常見的XML解析方法與應(yīng)用詳解

    Java中常見的XML解析方法與應(yīng)用詳解

    XML(eXtensible Markup Language)是一種用于存儲(chǔ)和傳輸數(shù)據(jù)的標(biāo)記語(yǔ)言,被廣泛應(yīng)用于表示和交換獨(dú)立于應(yīng)用程序和硬件平臺(tái)的結(jié)構(gòu)化信息,下面我們就來(lái)看看它的常見解析方法有哪些吧
    2024-01-01
  • Spring中@Conditional注解的用法

    Spring中@Conditional注解的用法

    這篇文章主要介紹了Spring中@Conditional注解的用法,@Conditional是Spring4新提供的注解,它的作用是按照一定的條件進(jìn)行判斷,滿足條件給容器注冊(cè)bean,需要的朋友可以參考下
    2024-01-01
  • Json在Struts中的轉(zhuǎn)換與傳遞方法

    Json在Struts中的轉(zhuǎn)換與傳遞方法

    下面小編就為大家?guī)?lái)一篇Json在Struts中的轉(zhuǎn)換與傳遞方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-11-11
  • java中Executor,ExecutorService,ThreadPoolExecutor詳解

    java中Executor,ExecutorService,ThreadPoolExecutor詳解

    這篇文章主要介紹了java中Executor,ExecutorService,ThreadPoolExecutor詳解的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • Java中mkdir()和mkdirs()的區(qū)別及說(shuō)明

    Java中mkdir()和mkdirs()的區(qū)別及說(shuō)明

    這篇文章主要介紹了Java中mkdir()和mkdirs()的區(qū)別及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • SpringBoot實(shí)現(xiàn)人臉識(shí)別等多種登錄方式

    SpringBoot實(shí)現(xiàn)人臉識(shí)別等多種登錄方式

    本文主要介紹了SpringBoot實(shí)現(xiàn)人臉識(shí)別等多種登錄方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • SpringBoot起步依賴和自動(dòng)配置基本介紹

    SpringBoot起步依賴和自動(dòng)配置基本介紹

    這篇文章主要介紹了SpringBoot起步依賴和自動(dòng)配置,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-04-04

最新評(píng)論

洛宁县| 兰州市| 武汉市| 津南区| 祁门县| 沈阳市| 锡林浩特市| 黔西县| 电白县| 绍兴市| 林西县| 凤翔县| 马关县| 梁山县| 蒙城县| 三江| 共和县| 措美县| 新乡市| 山东| 汨罗市| 泊头市| 白玉县| 太仓市| 武清区| 彭州市| 高平市| 邵阳市| 囊谦县| 铁力市| 洛扎县| 沁水县| 桐柏县| 晋宁县| 新晃| 克山县| 茶陵县| 竹北市| 开鲁县| 苏州市| 栾川县|