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

JAVA中的函數(shù)式接口Function和BiFunction詳解

 更新時間:2024年01月04日 10:02:33   作者:時間不會賴著不走  
這篇文章主要介紹了JAVA中的函數(shù)式接口Function和BiFunction詳解,JDK的函數(shù)式接口都加上了@FunctionalInterface注解進行標識,但是無論是否加上該注解只要接口中只有一個抽象方法,都是函數(shù)式接口,需要的朋友可以參考下

函數(shù)式接口

只有一個抽象方法的接口我們稱之為函數(shù)接口。 ?

JDK的函數(shù)式接口都加上了@FunctionalInterface注解進行標識。但是無論是否加上該注解只要接口中只有一個抽象方法,都是函數(shù)式接口。

為什么要用函數(shù)式接口

  • 代碼簡潔,開發(fā)快速
  • 可以使用極簡的lambda表達式實例化接口

其實就是為了適應(yīng)轉(zhuǎn)化成lambda表達式,寫成具體的方法也可以,但是就是多要多寫一些代碼,引入函數(shù)式接口就是為了配合轉(zhuǎn)化成極簡lambda表達式簡化代碼

怎么使用Function ,BiFunction計算轉(zhuǎn)換接口

Function

舉例如下:一個測試字符串長度的例子

沒轉(zhuǎn)化之前

public class function {
    static Function<String, Integer> strLen = new Function<String, Integer>() {
        @Override
        public Integer apply(String s) {
            int length = s.length();
            return length;
        }
    };
    public static void main(String[] args) {
        System.out.println("Function 示例, 字符串長度: " + strLen.apply("Hello"));
    }
}

轉(zhuǎn)化之后

public class function {
    static Function<String, Integer> strLen = s -> {
        int length = s.length();
        return length;
    };
    public static void main(String[] args) {
        System.out.println("Function 示例, 字符串長度: " + strLen.apply("Hello"));
    }
}

可以再簡化

public class function {
    static Function<String, Integer> strLen = String::length;
    public static void main(String[] args) {
        System.out.println("Function 示例, 字符串長度: " + strLen.apply("Hello"));
    }
}

測試結(jié)果:

在這里插入圖片描述

上面這個例子其實沒有必要創(chuàng)建一個接口來返回字符串的長度,這是簡化操作,例如下面想將一個過濾桶中的數(shù)據(jù)進行轉(zhuǎn)化封裝,那么你大可寫一個轉(zhuǎn)化函數(shù),加上參數(shù)和返回值,也可以利用JAVA8中封裝好的函數(shù)式計算轉(zhuǎn)換接口Function進行編寫,如下

private Function<Filters , LinkedHashMap<String, Long>>  RESULT_CONVENT = new Function<Filters, LinkedHashMap<String, Long>>() {
        @Override
        public LinkedHashMap<String, Long> apply(Filters term) {
            LinkedHashMap<String, Long> result = new LinkedHashMap<>();
            for (Filters.Bucket temp : term.getBuckets()) {
                MultiBucketsAggregation statisticTimeTerm = temp.getAggregations().get("Time");
                for (MultiBucketsAggregation.Bucket timeTemp : statisticTimeTerm.getBuckets()) {
                    result.put(timeTemp.getKeyAsString(), timeTemp.getDocCount());
                }
            }
            return result;
        }
    };

轉(zhuǎn)化成lambda表達式后

    private Function<Filters , LinkedHashMap<String, Long>>  RESULT_CONVENT = term -> {
        LinkedHashMap<String, Long> result = new LinkedHashMap<>();
        for (Filters.Bucket temp : term.getBuckets()) {
            MultiBucketsAggregation statisticTimeTerm = temp.getAggregations().get("Time");
            for (MultiBucketsAggregation.Bucket timeTemp : statisticTimeTerm.getBuckets()) {
                result.put(timeTemp.getKeyAsString(), timeTemp.getDocCount());
            }
        }
        return result;
    };

這樣寫的目的就是轉(zhuǎn)化成lambda表達式,轉(zhuǎn)化為函數(shù)式編程思想,熟悉函數(shù)式接口 同樣的下面的BiFunction功能更加強大,可以兩個參數(shù)的計算轉(zhuǎn)換

BiFunction兩個參數(shù)的計算轉(zhuǎn)換

public class function {
    static BiFunction<String, Integer, Boolean> expectLength = (s, num) -> s.length() == num;
    public static void main(String[] args) {
        System.out.print("BiFunction 示例, 字符串長度是否符合預(yù)期? " + expectLength.apply("21yi", 4));
    }
}

測試結(jié)果

在這里插入圖片描述

到此這篇關(guān)于JAVA中的函數(shù)式接口Function和BiFunction詳解的文章就介紹到這了,更多相關(guān)函數(shù)式接口Function和BiFunction內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用feign發(fā)送http請求解析報錯的問題

    使用feign發(fā)送http請求解析報錯的問題

    這篇文章主要介紹了使用feign發(fā)送http請求解析報錯的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • 教你如何監(jiān)控 Java 線程池運行狀態(tài)的操作(必看)

    教你如何監(jiān)控 Java 線程池運行狀態(tài)的操作(必看)

    這篇文章主要介紹了教你如何監(jiān)控 Java 線程池運行狀態(tài)的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • springboot項目不加端口號也可以訪問項目的方法步驟分析

    springboot項目不加端口號也可以訪問項目的方法步驟分析

    這篇文章主要介紹了springboot項目不加端口號也可以訪問項目的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • 解決idea啟動報錯javax.imageio.IIOException的問題

    解決idea啟動報錯javax.imageio.IIOException的問題

    這篇文章主要介紹了idea啟動報錯javax.imageio.IIOException,解決打不開idea問題,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • springboot+quartz以持久化的方式實現(xiàn)定時任務(wù)的代碼

    springboot+quartz以持久化的方式實現(xiàn)定時任務(wù)的代碼

    這篇文章主要介紹了springboot+quartz以持久化的方式實現(xiàn)定時任務(wù)的相關(guān)知識,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • Elasticsearch模糊查詢詳細介紹

    Elasticsearch模糊查詢詳細介紹

    這篇文章主要給大家介紹了關(guān)于Elasticsearch模糊查詢的相關(guān)資料,在數(shù)據(jù)庫查詢中模糊查詢是一種強大的技術(shù),可以用來搜索與指定模式匹配的數(shù)據(jù),需要的朋友可以參考下
    2023-09-09
  • Nacos-SpringBoot框架啟動不加載bootstrap.yml的解決

    Nacos-SpringBoot框架啟動不加載bootstrap.yml的解決

    這篇文章主要介紹了Nacos-SpringBoot框架啟動不加載bootstrap.yml的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • 登錄EasyConnect后無法通過jdbc訪問服務(wù)器數(shù)據(jù)庫問題的解決方法

    登錄EasyConnect后無法通過jdbc訪問服務(wù)器數(shù)據(jù)庫問題的解決方法

    描述一下近期使用EasyConnect遇到的問題,下面這篇文章主要給大家介紹了關(guān)于登錄EasyConnect后無法通過jdbc訪問服務(wù)器數(shù)據(jù)庫問題的解決方法,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-02-02
  • Java遍歷并刪除Map的四種方法對比

    Java遍歷并刪除Map的四種方法對比

    在Java中,遍歷并刪除?Map?中的元素有四種常見的方法,每種方法都有其適用場景和優(yōu)缺點,下面小編就來和大家詳細介紹一下這幾種方法的具體實現(xiàn)吧
    2024-10-10
  • Mac下設(shè)置Java默認版本的方法

    Mac下設(shè)置Java默認版本的方法

    今天工作的時候發(fā)現(xiàn)了一個錯誤,提示java版本太低,無法啟動!想起自己裝過高版本的Java,但是卻沒有默認啟動,從網(wǎng)上找了一些資料,整理下現(xiàn)在分享給大家,有需要的可以參考借鑒。
    2016-10-10

最新評論