欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

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

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

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

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

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

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

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

Function常用方法&&實踐

//將Function對象應用到輸入的參數(shù)上,然后返回計算結(jié)果。
R apply(T t);
//返回一個先執(zhí)行當前函數(shù)對象apply方法再執(zhí)行after函數(shù)對象apply方法的函數(shù)對象。
default <V> Function<T, V> andThen(Function<? super R, ? extends V> after) {
        Objects.requireNonNull(after);
        return (T t) -> after.apply(apply(t));
    }
//返回一個先執(zhí)行before函數(shù)對象apply方法再執(zhí)行當前函數(shù)對象apply方法的函數(shù)對象
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);
        //返回一個執(zhí)行了apply()方法之后只會返回輸入?yún)?shù)的函數(shù)對象
        Object identity = Function.identity().apply("huohuo");
        System.out.println(identity);
    }

直接看結(jié)果:

andThen value=36
compose value2=18
huohuo

apply基本應用

字符串長度記錄返回

public class MyFunction implements Function<String,Integer>{

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

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

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長度返回
        System.out.println(num);
        //語句整合返回
        System.out.println(valueBi);
    }

返回值:

16
Nice to meet you;my name is huohuo

其實使用的過程感覺這些都無所必要,但是對于新特性以及代碼規(guī)范而言,即使是簡易代碼,也有了一個整合的過程。

Function簡單實踐僅此為止,下篇文章講述Predicate的使用。

總結(jié)

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

相關(guān)文章

  • SpringBoot簡單使用SpringData的jdbc和durid

    SpringBoot簡單使用SpringData的jdbc和durid

    今天給大家?guī)淼氖顷P(guān)于Java的相關(guān)知識,文章圍繞著SpringBoot簡單使用SpringData的jdbc和durid,文中有非常詳細的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • springcloud gateway聚合swagger2的方法示例

    springcloud gateway聚合swagger2的方法示例

    這篇文章主要介紹了springcloud gateway聚合swagger2的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • SpringBoot與Postman實現(xiàn)REST模擬請求的操作

    SpringBoot與Postman實現(xiàn)REST模擬請求的操作

    這篇文章主要介紹了SpringBoot與Postman實現(xiàn)REST模擬請求的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • SpringBoot項目打成War布署在Tomcat的詳細步驟

    SpringBoot項目打成War布署在Tomcat的詳細步驟

    這篇文章主要介紹了SpringBoot項目打成War布署在Tomcat,本文分步驟結(jié)合圖文實例給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • springboot+thymeleaf整合阿里云OOS對象存儲圖片的實現(xiàn)

    springboot+thymeleaf整合阿里云OOS對象存儲圖片的實現(xiàn)

    本文主要介紹了springboot+thymeleaf整合阿里云OOS對象存儲圖片的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-05-05
  • Java開發(fā)人員需知的十大戒律

    Java開發(fā)人員需知的十大戒律

    這篇文章主要介紹了Java開發(fā)人員需知的十大戒律,較為詳細的總結(jié)分析了Java開發(fā)中常見的注意事項與編程技巧,需要的朋友可以參考下
    2015-10-10
  • SpringBoot如何返回頁面的實現(xiàn)方法

    SpringBoot如何返回頁面的實現(xiàn)方法

    SpringBoot中使用Controller和頁面的結(jié)合能夠很好地實現(xiàn)用戶的功能及頁面數(shù)據(jù)的傳遞。本文介紹了如何實現(xiàn)頁面的返回以及這里面所包含的坑,感興趣的可以了解一下
    2021-07-07
  • JNDI具體用法詳解

    JNDI具體用法詳解

    JNDI是java命名和目錄接口,本文主要介紹了JNDI具體用法詳解,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • 詳談Spring對IOC的理解(推薦篇)

    詳談Spring對IOC的理解(推薦篇)

    下面小編就為大家?guī)硪黄斦凷pring對IOC的理解(推薦篇)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • 關(guān)于Java的二叉樹、紅黑樹、B+樹詳解

    關(guān)于Java的二叉樹、紅黑樹、B+樹詳解

    這篇文章主要介紹了關(guān)于Java的二叉樹、紅黑樹、B+樹詳解,能同時具備數(shù)組查找快的優(yōu)點以及鏈表插入和刪除快的優(yōu)點的數(shù)據(jù)結(jié)構(gòu)就是樹,需要的朋友可以參考下
    2023-05-05

最新評論