中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2023-05-06 11:22:00 來源:億速云 閱讀:100 作者:iii 欄目:開發技術

這篇文章主要介紹“JDK8新特性java.util.function-Function接口怎么使用”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“JDK8新特性java.util.function-Function接口怎么使用”文章能幫助大家解決問題。

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

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

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

現如今,我們則從Function常用函數入口,真正了解一下。

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

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

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

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

  • 該注解只能標記在”有且僅有一個抽象方法”的接口上。

  • JDK8接口中的靜態方法和默認方法,都不算是抽象方法。

  • 接口默認繼承java.lang.Object,所以如果接口顯示聲明覆蓋了Object中方法,那么也不算抽象方法。

  • 該注解不是必須的,如果一個接口符合”函數式接口”定義,那么加不加該注解都沒有影響。加上該注解能夠更好地讓編譯器進行檢查。如果編寫的不是函數式接口,但是加上了@FunctionInterface,那么編譯器會報錯。

  • 在一個接口中定義兩個自定義的方法,就會產生Invalid &lsquo;@FunctionalInterface&rsquo; annotation; FunctionalInterfaceTest is not a functional interface錯誤.

Function常用方法&&實踐

//將Function對象應用到輸入的參數上,然后返回計算結果。
R apply(T t);
//返回一個先執行當前函數對象apply方法再執行after函數對象apply方法的函數對象。
default <V> Function<T, V> andThen(Function<? super R, ? extends V> after) {
        Objects.requireNonNull(after);
        return (T t) -> after.apply(apply(t));
    }
//返回一個先執行before函數對象apply方法再執行當前函數對象apply方法的函數對象
default <V> Function<V, R> compose(Function<? super V, ? extends T> before) {
        Objects.requireNonNull(before);
        return (V v) -> apply(before.apply(v));
    }

compose 和 andThen 的不同之處是函數執行的順序不同。

compose 函數先執行參數,然后執行調用者,而 andThen 先執行調用者,然后再執行參數。

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);
        //返回一個執行了apply()方法之后只會返回輸入參數的函數對象
        Object identity = Function.identity().apply("huohuo");
        System.out.println(identity);
    }

直接看結果:

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的不同就是傳入兩個參數,依舊返回一個值。

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

最后調用結果:

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

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

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

關于“JDK8新特性java.util.function-Function接口怎么使用”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

jdk
AI

井研县| 平潭县| 渝北区| 凉城县| 安宁市| 陕西省| 雷波县| 松潘县| 南京市| 萨迦县| 南陵县| 蒙阴县| 永寿县| 叶城县| 张家口市| 响水县| 孟津县| 栖霞市| 蒙山县| 那曲县| 邵阳市| 黑水县| 霍山县| 包头市| 裕民县| 澄江县| 浮梁县| 肥乡县| 精河县| 新化县| 建平县| 永登县| 宜川县| 赣州市| 清涧县| 辽阳市| 正安县| 商都县| 五常市| 南溪县| 神木县|