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

JDK8新特性-java.util.function-Function接口使用

 更新時(shí)間:2023年04月03日 09:21:49   作者:心心念念的小鼠標(biāo)  
這篇文章主要介紹了JDK8新特性-java.util.function-Function接口使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

JDK8新特性-java.util.function-Function接口

14年,Oracle公司如期發(fā)布了Java 8正式版。現(xiàn)如今4年過(guò)去了,終于鼓起勇氣認(rèn)真對(duì)待它,就好似雖然認(rèn)識(shí)了好幾年的伙伴,突然感覺(jué)要成為情侶的感覺(jué)……

JDK 1.8 API包含了很多內(nèi)建的函數(shù)式接口,在老Java中常用到的比如Comparator或者Runnable接口,這些接口都增加了@FunctionalInterface注解以便能用在lambda上。

現(xiàn)如今,我們則從Function常用函數(shù)入口,真正了解一下。

nametypedescription
ConsumerConsumer< T >接收T對(duì)象,不返回值
PredicatePredicate< T >接收T對(duì)象并返回boolean
FunctionFunction< T, R >接收T對(duì)象,返回R對(duì)象
SupplierSupplier< T >提供T對(duì)象(例如工廠),不接收值
UnaryOperatorUnaryOperator接收T對(duì)象,返回T對(duì)象
BinaryOperatorBinaryOperator接收兩個(gè)T對(duì)象,返回T對(duì)象

標(biāo)注為FunctionalInterface的接口被稱為函數(shù)式接口,該接口只能有一個(gè)自定義方法,但是可以包括從object類繼承而來(lái)的方法。

如果一個(gè)接口只有一個(gè)方法,則編譯器會(huì)認(rèn)為這就是一個(gè)函數(shù)式接口。

是否是一個(gè)函數(shù)式接口,需要注意的有以下幾點(diǎn):

  • 該注解只能標(biāo)記在”有且僅有一個(gè)抽象方法”的接口上。
  • JDK8接口中的靜態(tài)方法和默認(rèn)方法,都不算是抽象方法。
  • 接口默認(rèn)繼承java.lang.Object,所以如果接口顯示聲明覆蓋了Object中方法,那么也不算抽象方法。
  • 該注解不是必須的,如果一個(gè)接口符合”函數(shù)式接口”定義,那么加不加該注解都沒(méi)有影響。加上該注解能夠更好地讓編譯器進(jìn)行檢查。如果編寫的不是函數(shù)式接口,但是加上了@FunctionInterface,那么編譯器會(huì)報(bào)錯(cuò)。
  • 在一個(gè)接口中定義兩個(gè)自定義的方法,就會(huì)產(chǎn)生Invalid ‘@FunctionalInterface’ annotation; FunctionalInterfaceTest is not a functional interface錯(cuò)誤.

Function常用方法&&實(shí)踐

//將Function對(duì)象應(yīng)用到輸入的參數(shù)上,然后返回計(jì)算結(jié)果。
R apply(T t);
//返回一個(gè)先執(zhí)行當(dāng)前函數(shù)對(duì)象apply方法再執(zhí)行after函數(shù)對(duì)象apply方法的函數(shù)對(duì)象。
default <V> Function<T, V> andThen(Function<? super R, ? extends V> after) {
        Objects.requireNonNull(after);
        return (T t) -> after.apply(apply(t));
    }
//返回一個(gè)先執(zhí)行before函數(shù)對(duì)象apply方法再執(zhí)行當(dāng)前函數(shù)對(duì)象apply方法的函數(shù)對(duì)象
default <V> Function<V, R> compose(Function<? super V, ? extends T> before) {
        Objects.requireNonNull(before);
        return (V v) -> apply(before.apply(v));
    }

compose 和 andThen 的不同之處是函數(shù)執(zhí)行的順序不同。

compose 函數(shù)先執(zhí)行參數(shù),然后執(zhí)行調(diào)用者,而 andThen 先執(zhí)行調(diào)用者,然后再執(zhí)行參數(shù)。

public static void main(String[] args) {
        Function<Integer, Integer> name = e -> e * 2;
        Function<Integer, Integer> square = e -> e * e;
        int value = name.andThen(square).apply(3);
        System.out.println("andThen value=" + value);
        int value2 = name.compose(square).apply(3);
        System.out.println("compose value2=" + value2);
        //返回一個(gè)執(zhí)行了apply()方法之后只會(huì)返回輸入?yún)?shù)的函數(shù)對(duì)象
        Object identity = Function.identity().apply("huohuo");
        System.out.println(identity);
    }

直接看結(jié)果:

andThen value=36
compose value2=18
huohuo

apply基本應(yīng)用

字符串長(zhǎng)度記錄返回

public class MyFunction implements Function<String,Integer>{

    @Override
    public Integer apply(String s) {
        return s.length();
    }
}

返回兩個(gè)字符串的連接,BiFunction與Function的不同就是傳入兩個(gè)參數(shù),依舊返回一個(gè)值。

public class MyBiFunction implements BiFunction<String, String, String> {
    @Override
    public String apply(String s, String s2) {
        return s+";"+s2;
    }
}

最后調(diào)用結(jié)果:

private static String hello = "Nice to meet you";
    private static String name = "my name is huohuo";

    public static void main(String[] args) {
        MyFunction myFunction = new MyFunction();
        MyBiFunction biFunction = new MyBiFunction();
        int num = myFunction.apply(hello);
        String valueBi = biFunction.apply(hello, name);
        //hello長(zhǎng)度返回
        System.out.println(num);
        //語(yǔ)句整合返回
        System.out.println(valueBi);
    }

返回值:

16
Nice to meet you;my name is huohuo

其實(shí)使用的過(guò)程感覺(jué)這些都無(wú)所必要,但是對(duì)于新特性以及代碼規(guī)范而言,即使是簡(jiǎn)易代碼,也有了一個(gè)整合的過(guò)程。

Function簡(jiǎn)單實(shí)踐僅此為止,下篇文章講述Predicate的使用。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 淺談Java生命周期管理機(jī)制

    淺談Java生命周期管理機(jī)制

    最近有位細(xì)心的朋友在閱讀筆者的文章時(shí),對(duì)java類的生命周期問(wèn)題有一些疑惑,筆者打開(kāi)百度搜了一下相關(guān)的問(wèn)題,看到網(wǎng)上的資料很少有把這個(gè)問(wèn)題講明白的,主要是因?yàn)槟壳皣?guó)內(nèi)java方面的教材大多只是告訴你“怎樣做”,但至于“為什么這樣做”卻不多說(shuō)
    2016-01-01
  • Java Mybatis框架Dao層的實(shí)現(xiàn)與映射文件以及核心配置文件詳解分析

    Java Mybatis框架Dao層的實(shí)現(xiàn)與映射文件以及核心配置文件詳解分析

    MyBatis 是一款優(yōu)秀的持久層框架,它支持自定義 SQL、存儲(chǔ)過(guò)程以及高級(jí)映射。MyBatis 免除了幾乎所有的 JDBC 代碼以及設(shè)置參數(shù)和獲取結(jié)果集的工作。MyBatis 可以通過(guò)簡(jiǎn)單的 XML 或注解來(lái)配置和映射原始類型、接口和 Java POJO為數(shù)據(jù)庫(kù)中的記錄
    2021-10-10
  • Spring中PathMatcher路徑匹配器的實(shí)現(xiàn)

    Spring中PathMatcher路徑匹配器的實(shí)現(xiàn)

    Spring框架中的PathMatcher是一個(gè)接口,本文主要介紹了Spring中PathMatcher路徑匹配器的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-07-07
  • Spring Data JPA中 in 條件參數(shù)的傳遞方式

    Spring Data JPA中 in 條件參數(shù)的傳遞方式

    這篇文章主要介紹了Spring Data JPA中 in 條件參數(shù)的傳遞方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • 使用Java實(shí)現(xiàn)MapReduce詞頻統(tǒng)計(jì)示例代碼

    使用Java實(shí)現(xiàn)MapReduce詞頻統(tǒng)計(jì)示例代碼

    這篇文章主要介紹了使用Java實(shí)現(xiàn)MapReduce詞頻統(tǒng)計(jì)的相關(guān)資料,通過(guò)詞頻統(tǒng)計(jì)示例來(lái)展示MapReduce的運(yùn)行機(jī)制,涵蓋了Mapper和Reducer的實(shí)現(xiàn),并說(shuō)明了如何配置和執(zhí)行MapReduce作業(yè),需要的朋友可以參考下
    2024-11-11
  • Java獲取文件ContentType案例

    Java獲取文件ContentType案例

    這篇文章主要介紹了Java獲取文件ContentType案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-08-08
  • java中棧和隊(duì)列的實(shí)現(xiàn)和API的用法(詳解)

    java中棧和隊(duì)列的實(shí)現(xiàn)和API的用法(詳解)

    下面小編就為大家?guī)?lái)一篇java中棧和隊(duì)列的實(shí)現(xiàn)和API的用法(詳解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05
  • Spring?AOP操作的相關(guān)術(shù)語(yǔ)及環(huán)境準(zhǔn)備

    Spring?AOP操作的相關(guān)術(shù)語(yǔ)及環(huán)境準(zhǔn)備

    這篇文章主要為大家介紹了Spring?AOP操作的相關(guān)術(shù)語(yǔ)及環(huán)境準(zhǔn)備學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • java實(shí)現(xiàn)簡(jiǎn)單發(fā)送郵件功能

    java實(shí)現(xiàn)簡(jiǎn)單發(fā)送郵件功能

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡(jiǎn)單發(fā)送郵件功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • Java語(yǔ)言實(shí)現(xiàn)掃雷游戲(1)

    Java語(yǔ)言實(shí)現(xiàn)掃雷游戲(1)

    這篇文章主要為大家詳細(xì)介紹了Java語(yǔ)言實(shí)現(xiàn)的掃雷游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04

最新評(píng)論

宝清县| 颍上县| 图木舒克市| 阿克苏市| 方山县| 平江县| 临武县| 达尔| 镇巴县| 武功县| 彭水| 治多县| 百色市| 东乡| 永嘉县| 池州市| 漳州市| 高清| 石河子市| 芷江| 莱阳市| 灌云县| 哈巴河县| 九寨沟县| 东安县| 卓资县| 望谟县| 靖州| 新昌县| 民丰县| 怀远县| 邢台市| 永平县| 中宁县| 平泉县| 定兴县| 灵石县| 晋中市| 南汇区| 高碑店市| 兖州市|