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

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

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

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

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

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

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

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

你可以自己定義一個支持三個參數(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ù)式接口

雖然標準庫中沒有 TriConsumer,但一些第三方庫(例如 Apache Commons 或 Vavr)中可能提供了類似的功能。這樣你就不需要自己實現(xiàn)。

3. 使用組合 Consumer 解決

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

使用 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 是標準庫中支持兩個參數(shù)的函數(shù)式接口。通過嵌套 Consumer,可以間接實現(xiàn)對三個參數(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<>();

        // 定義一個通用方法來構建并生成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);
                });

        // 構建各類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 如何接受兩個參數(shù)?

在 Java 的標準庫中,Supplier 是一個函數(shù)式接口,用于生成一個結果。它的核心方法是:

T get();

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

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

Java 的標準庫沒有直接提供這樣一個接口,但你可以通過以下方式實現(xiàn):

1. 自定義一個類似 BiSupplier 的接口

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

@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. 結合 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,但功能上可以等效于一個接受兩個參數(shù)的 Supplier。

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

你可以通過將兩個參數(shù)封裝為一個對象,仍然使用標準的 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

總結

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

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

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

相關文章

  • 搞懂JAVAObject中的hashCode()

    搞懂JAVAObject中的hashCode()

    今天小編就為大家分享一篇關于關于Object中equals方法和hashCode方法判斷的分析,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2021-08-08
  • 使用FeignClient調(diào)用遠程服務時整合本地的實現(xiàn)方法

    使用FeignClient調(diào)用遠程服務時整合本地的實現(xiàn)方法

    這篇文章主要介紹了使用FeignClient調(diào)用遠程服務時整合本地的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • JavaMe開發(fā)繪制文本框TextEdit

    JavaMe開發(fā)繪制文本框TextEdit

    在JavaMe連載(3)-也說MVC設計模式 一文中提到了一個TextEdit類,但沒有給出具體實現(xiàn),TextEdit是采用GameCanvas繪制的文本編輯器。本文結合實例給出實現(xiàn)的方法。
    2015-09-09
  • Java計算字符串公式的方式解讀

    Java計算字符串公式的方式解讀

    這篇文章主要介紹了Java計算字符串公式的方式解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Spring Boot實戰(zhàn)之數(shù)據(jù)庫操作的示例代碼

    Spring Boot實戰(zhàn)之數(shù)據(jù)庫操作的示例代碼

    本篇文章主要介紹了Spring Boot實戰(zhàn)之數(shù)據(jù)庫操作的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • Java中處理I/O操作的不同方式

    Java中處理I/O操作的不同方式

    BIO、NIO和AIO是Java中處理I/O操作的三種不同方式,它們分別代表阻塞I/O、非阻塞I/O和異步I/O,本文我們結合代碼進行一個綜合演示,代碼由于是偽代碼,可能存在不足,僅供大家參考
    2024-02-02
  • 詳解Java中List的正確的刪除方法

    詳解Java中List的正確的刪除方法

    這篇文章主要為大家詳細介紹了Java中List的正確的刪除方法,文中的示例代碼講解詳細,對我們學習有一定幫助,需要的可以參考一下
    2022-05-05
  • Hadoop2.8.1完全分布式環(huán)境搭建過程

    Hadoop2.8.1完全分布式環(huán)境搭建過程

    本文搭建了一個由三節(jié)點(master、slave1、slave2)構成的Hadoop完全分布式集群(區(qū)別單節(jié)點偽分布式集群),并通過Hadoop分布式計算的一個示例測試集群的正確性。對hadoop分布式環(huán)境搭建過程感興趣的朋友跟隨小編一起看看吧
    2019-06-06
  • spring boot 結合jsp案例詳解

    spring boot 結合jsp案例詳解

    這篇文章主要介紹了spring boot 結合jsp案例詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-10-10
  • Java實現(xiàn)導入csv的示例代碼

    Java實現(xiàn)導入csv的示例代碼

    這篇文章主要為大家詳細介紹了Java實現(xiàn)導入csv的相關知識,文中的示例代碼講解詳細,具有一定的借鑒價值,有需要的小伙伴可以跟隨小編一起學習一下
    2024-03-03

最新評論