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

java中的Consumer、Supply如何實(shí)現(xiàn)多參數(shù)?

 更新時(shí)間:2024年11月30日 15:52:40   作者:魔道不誤砍柴功  
Java的Consumer接口只能接受一個(gè)參數(shù),但可以通過(guò)自定義接口、使用Tuple或嵌套結(jié)構(gòu)來(lái)實(shí)現(xiàn)對(duì)多個(gè)參數(shù)的處理,對(duì)于Supplier接口,它不能接受參數(shù),但可以通過(guò)自定義BiSupplier、結(jié)合Function或封裝參數(shù)為對(duì)象來(lái)實(shí)現(xiàn)對(duì)兩個(gè)參數(shù)并返回一個(gè)值的功能

Java的Consumer接口只能接受一個(gè)參數(shù),但可以通過(guò)自定義接口、使用Tuple或嵌套結(jié)構(gòu)來(lái)實(shí)現(xiàn)對(duì)多個(gè)參數(shù)的處理,對(duì)于Supplier接口,它不能接受參數(shù),但可以通過(guò)自定義BiSupplier、結(jié)合Function或封裝參數(shù)為對(duì)象來(lái)實(shí)現(xiàn)對(duì)兩個(gè)參數(shù)并返回一個(gè)值的功能。文章介紹了Java中Consumer和Supplier函數(shù)式接口的使用,以及如何通過(guò)自定義接口、使用組合或第三方庫(kù)來(lái)實(shí)現(xiàn)多參數(shù)的類(lèi)似功能

Consumer如何接受多參數(shù)?

在 Java 中,Consumer 是一個(gè)只接受 一個(gè)參數(shù) 的函數(shù)式接口,定義在 java.util.function 包中。其主要方法是 accept(T t),用于處理傳入的參數(shù)而不返回值。

如果你需要一個(gè)可以接受 三個(gè)參數(shù) 的類(lèi)似功能,可以通過(guò)以下方式實(shí)現(xiàn):

1. 創(chuàng)建自定義的 Consumer 接口

你可以自己定義一個(gè)支持三個(gè)參數(shù)的 Consumer

@FunctionalInterface
public interface TriConsumer<T, U, V> {
    void accept(T t, U u, V v);
}

使用示例:

TriConsumer<String, Integer, Boolean> triConsumer = (name, age, isActive) -> {
    System.out.println("Name: " + name);
    System.out.println("Age: " + age);
    System.out.println("Active: " + isActive);
};

triConsumer.accept("Alice", 25, true);

2. 使用三參數(shù)的現(xiàn)成函數(shù)式接口

雖然標(biāo)準(zhǔn)庫(kù)中沒(méi)有 TriConsumer,但一些第三方庫(kù)(例如 Apache Commons 或 Vavr)中可能提供了類(lèi)似的功能。這樣你就不需要自己實(shí)現(xiàn)。

3. 使用組合 Consumer 解決

如果你堅(jiān)持使用 Java 自帶的 Consumer,可以將三個(gè)參數(shù)打包成一個(gè)對(duì)象傳遞。例如:

使用 ConsumerTuple

class Tuple3<T, U, V> {
    final T first;
    final U second;
    final V third;

    public Tuple3(T first, U second, V third) {
        this.first = first;
        this.second = second;
        this.third = third;
    }
}

Consumer<Tuple3<String, Integer, Boolean>> consumer = tuple -> {
    System.out.println("Name: " + tuple.first);
    System.out.println("Age: " + tuple.second);
    System.out.println("Active: " + tuple.third);
};

consumer.accept(new Tuple3<>("Bob", 30, false));

4. 使用 BiConsumer 和嵌套

BiConsumer 是標(biāo)準(zhǔn)庫(kù)中支持兩個(gè)參數(shù)的函數(shù)式接口。通過(guò)嵌套 Consumer,可以間接實(shí)現(xiàn)對(duì)三個(gè)參數(shù)的操作:

BiConsumer<String, Integer> biConsumer = (name, age) -> {
    Consumer<Boolean> innerConsumer = isActive -> {
        System.out.println("Name: " + name);
        System.out.println("Age: " + age);
        System.out.println("Active: " + isActive);
    };
    innerConsumer.accept(true);
};

biConsumer.accept("Charlie", 28);

參考代碼

@Override
    public List<CsAIAppConfig> doGenerateDefaultAI(AIServiceSettingDTO aiServiceSetting) {
        List<CsAIAppConfig> aiConfigOfList = new ArrayList<>();

        // 定義一個(gè)通用方法來(lái)構(gòu)建并生成AI配置
        BiConsumer<String, AIEnableEnum> createAIConfig =
                (modelId, enableEnum) -> Optional.ofNullable(modelId).ifPresent(id -> {
                    SaveOrUpdateAIEntity build = SaveOrUpdateAIEntity.builder()
                            .targetId("DEFAULT")
                            .modelId(id)
                            .aiEnableEnum(enableEnum)
                            .knowledge(getKnowledgeByEnum(enableEnum, aiServiceSetting))
                            .csAIAppConfigs(aiServiceSetting.getCsAIAppConfigs())
                            .build();
                    generateAI(build, aiConfigOfList);
                });

        // 構(gòu)建各類(lèi)AI配置
        createAIConfig.accept(aiServiceSetting.getWorkOrderModelId(), AIEnableEnum.CS_WORK_ORDER_AI_ENABLE);
        createAIConfig.accept(aiServiceSetting.getWxKfModelId(), AIEnableEnum.CS_WX_KF_AI_ENABLE);
        createAIConfig.accept(aiServiceSetting.getZxKfModelId(), AIEnableEnum.CS_ZX_KF_AI_ENABLE);
        createAIConfig.accept(aiServiceSetting.getMhKhModelId(), AIEnableEnum.CS_MH_KH_AI_ENABLE);

        return aiConfigOfList;
    }

Supply 如何接受兩個(gè)參數(shù)?

在 Java 的標(biāo)準(zhǔn)庫(kù)中,Supplier 是一個(gè)函數(shù)式接口,用于生成一個(gè)結(jié)果。它的核心方法是:

T get();

這意味著 Supplier 不接受任何參數(shù),只負(fù)責(zé)返回一個(gè)值。

如果你需要類(lèi)似 Supplier 接受兩個(gè)參數(shù):

Java 的標(biāo)準(zhǔn)庫(kù)沒(méi)有直接提供這樣一個(gè)接口,但你可以通過(guò)以下方式實(shí)現(xiàn):

1. 自定義一個(gè)類(lèi)似 BiSupplier 的接口

可以創(chuàng)建一個(gè)支持兩個(gè)輸入?yún)?shù)并返回一個(gè)值的接口:

@FunctionalInterface
public interface BiSupplier<T, U, R> {
    R get(T t, U u);
}

使用示例:

BiSupplier<String, Integer, String> biSupplier = (name, age) -> 
    "Name: " + name + ", Age: " + age;

System.out.println(biSupplier.get("Alice", 25)); // 輸出: Name: Alice, Age: 25

2. 結(jié)合 Function 使用

如果你不想創(chuàng)建新接口,可以使用 BiFunction 替代:

BiFunction<String, Integer, String> biFunction = (name, age) -> 
    "Name: " + name + ", Age: " + age;

System.out.println(biFunction.apply("Alice", 25)); // 輸出: Name: Alice, Age: 25

雖然它的名字是 BiFunction,但功能上可以等效于一個(gè)接受兩個(gè)參數(shù)的 Supplier。

3. 將參數(shù)封裝為對(duì)象

你可以通過(guò)將兩個(gè)參數(shù)封裝為一個(gè)對(duì)象,仍然使用標(biāo)準(zhǔn)的 Supplier

class Person {
    String name;
    int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Name: " + name + ", Age: " + age;
    }
}

Supplier<Person> personSupplier = () -> new Person("Alice", 25);

System.out.println(personSupplier.get()); // 輸出: Name: Alice, Age: 25

總結(jié)

Java 的 Consumer 本身只能接受一個(gè)參數(shù)。對(duì)于三個(gè)參數(shù),可以自定義 TriConsumer,使用 Tuple 或嵌套結(jié)構(gòu)。如果需要更強(qiáng)大的函數(shù)式接口支持,考慮引入第三方庫(kù)或切換到更高級(jí)的解決方案。

Supplier 本身不能接受任何參數(shù),只負(fù)責(zé)提供一個(gè)值。如果需要接受兩個(gè)參數(shù)并返回一個(gè)值: 自定義 BiSupplier。使用 BiFunction 替代。封裝參數(shù)為一個(gè)對(duì)象,繼續(xù)使用標(biāo)準(zhǔn)的 Supplier。

到此這篇關(guān)于java中的Consumer、Supply如何實(shí)現(xiàn)多參數(shù)?的文章就介紹到這了,更多相關(guān)java中的Consumer、Supply多參數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • springboot如何讀取自定義properties并注入到bean中

    springboot如何讀取自定義properties并注入到bean中

    這篇文章主要介紹了springboot讀取自定義properties并注入到bean中,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Eclipse中配置Maven的圖文教程

    Eclipse中配置Maven的圖文教程

    這篇文章主要介紹了Eclipse中配置Maven的圖文教程,需要的朋友可以參考下
    2020-12-12
  • 淺析java 希爾排序(Shell)算法

    淺析java 希爾排序(Shell)算法

    這篇文章主要介紹了淺析java 希爾排序(Shell)算法的原理以及示例,需要的朋友可以參考下
    2015-02-02
  • Java優(yōu)雅實(shí)現(xiàn)判空方法(結(jié)合實(shí)際案例)

    Java優(yōu)雅實(shí)現(xiàn)判空方法(結(jié)合實(shí)際案例)

    相信寫(xiě)過(guò)代碼的朋友們都會(huì)進(jìn)行一個(gè)非空判斷,但是各種非空判斷中,那種才是最優(yōu)雅,最高效的呢,這篇文章主要介紹了Java優(yōu)雅實(shí)現(xiàn)判空方法的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-06-06
  • Java環(huán)境中MyBatis與Spring或Spring MVC框架的集成方法

    Java環(huán)境中MyBatis與Spring或Spring MVC框架的集成方法

    和MyBatis類(lèi)似,Spring或者Spring MVC框架在Web應(yīng)用程序的運(yùn)作中同樣主要負(fù)責(zé)處理數(shù)據(jù)庫(kù)事務(wù),這里我們就來(lái)看一下Java環(huán)境中MyBatis與Spring或Spring MVC框架的集成方法
    2016-06-06
  • 詳解Java中static關(guān)鍵字的使用和原理

    詳解Java中static關(guān)鍵字的使用和原理

    static可以用來(lái)修飾的成員變量和成員方法,被修飾的成員是屬于類(lèi)的,而不是單單是屬于某個(gè)對(duì)象的。本文就來(lái)詳細(xì)說(shuō)說(shuō)他的使用和原理,需要的可以參考一下
    2022-10-10
  • Java使用System.currentTimeMillis()方法計(jì)算程序運(yùn)行時(shí)間的示例代碼

    Java使用System.currentTimeMillis()方法計(jì)算程序運(yùn)行時(shí)間的示例代碼

    System.currentTimeMillis() 方法的返回類(lèi)型為 long ,表示毫秒為單位的當(dāng)前時(shí)間,文中通過(guò)示例代碼介紹了計(jì)算 String 類(lèi)型與 StringBuilder 類(lèi)型拼接字符串的耗時(shí)情況,對(duì)Java計(jì)算程序運(yùn)行時(shí)間相關(guān)知識(shí)感興趣的朋友一起看看吧
    2022-03-03
  • Java的信號(hào)量semaphore講解

    Java的信號(hào)量semaphore講解

    這篇文章主要介紹了Java的信號(hào)量semaphore講解,Semaphore底層是基于AbstractQueuedSynchronizer來(lái)實(shí)現(xiàn)的,Semaphore稱(chēng)為計(jì)數(shù)信號(hào)量,它允許n個(gè)任務(wù)同時(shí)訪問(wèn)某個(gè)資源,需要的朋友可以參考下
    2023-12-12
  • 關(guān)于Java垃圾回收開(kāi)銷(xiāo)降低的幾條建議

    關(guān)于Java垃圾回收開(kāi)銷(xiāo)降低的幾條建議

    垃圾回收(Garbage Collection)是Java虛擬機(jī)(JVM)垃圾回收器提供的一種用于在空閑時(shí)間不定時(shí)回收無(wú)任何對(duì)象引用的對(duì)象占據(jù)的內(nèi)存空間的一種機(jī)制,下面這篇文章主要介紹了關(guān)于Java垃圾回收開(kāi)銷(xiāo)降低的幾條建議,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-02-02
  • 一文帶你學(xué)會(huì)Java事件機(jī)制

    一文帶你學(xué)會(huì)Java事件機(jī)制

    今天小編就為大家分享一篇關(guān)于Java事件機(jī)制的文章,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2021-10-10

最新評(píng)論

五指山市| 安岳县| 新化县| 金乡县| 宁国市| 南京市| 贞丰县| 南开区| 洪湖市| 岑溪市| 西充县| 千阳县| 阿拉尔市| 沈阳市| 莫力| 蓬安县| 青神县| 泰安市| 江山市| 开鲁县| 司法| 芜湖市| 云阳县| 全椒县| 鹤岗市| 永昌县| 莱州市| 花垣县| 西吉县| 栖霞市| 金阳县| 三江| 巴彦淖尔市| 湘阴县| 镇原县| 中方县| 驻马店市| 大足县| 扎囊县| 临猗县| 湖北省|