第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

具有可從方法調(diào)用的三個(gè)參數(shù)的 Java 函數(shù)

具有可從方法調(diào)用的三個(gè)參數(shù)的 Java 函數(shù)

HUH函數(shù) 2023-03-09 16:55:41
我有這種調(diào)用多個(gè) API 并聚合所有結(jié)果并將它們返回到 Map 中的方法,其中每組結(jié)果都與目標(biāo) API 匹配,以便它們可以在服務(wù)中正確分組和顯示。public AggregateResults search(QueryParams params) {    Stream<APITarget> targets = params.getTargets().parallelStream();    Function<APITarget, APIResults> func = (APITarget target) -> {        if (params.length() >= MIN_LENGTH) {           switch (target) {               case api1:                    return searchAPI1(params);               case api2:                   return searchAPI2(params);               .               .               case apin:                    return searchAPIn(params);            }        }        return new APIResults.Builder().build();    };    Map<APITarget, APIResults> results = targets.collect(Collectors.toMap(t -> t, func));    return AggregateResults;}我現(xiàn)在必須重構(gòu)此代碼,以便例如可以在一個(gè)函數(shù)中調(diào)用 API 1 - 3,然后可以從另一個(gè)函數(shù)調(diào)用 API 4 - N。這些函數(shù)將從不同的方法調(diào)用,因此我需要將此函數(shù)移出此方法,然后將 QueryParams 對象作為另一個(gè)參數(shù)傳遞給函數(shù),但隨后我遇到了函數(shù)無法接受的問題超過一個(gè)參數(shù)。例如Function<APITarget, APIResults> exampleFunc = (APITarget target, QueryParams params) -> {    if (params.length() >= MIN_LENGTH) {        switch (target) {            case api1:                return searchAPI1(params);            case api2:                return searchAPI2(params);                    }    }    return new APIResults.Builder().build();};我在這里看到過類似的東西:Java lambda 可以有多個(gè)參數(shù)嗎? 但是 BiFunctions 的示例僅顯示它們被用作 lambda,因此在被外部方法調(diào)用時(shí)不會(huì)起作用,據(jù)我所知。此外,當(dāng)它談到創(chuàng)建一個(gè)新的 FunctionalInterface 時(shí),我不確定究竟需要什么才能在我需要的功能中使用新接口。任何想法都會(huì)很棒。
查看完整描述

2 回答

?
米脂

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超3個(gè)贊

修改以反映示例


首先,定義一些必需的BiFunction



  BiFunction<Integer, int[], Integer> func = (a, b) ->

      {

         for (int i = 0; i < b.length; i++) {

            a *= b[i];

         }

         return Integer.valueOf(a);

      };



現(xiàn)在定義一些數(shù)據(jù)。


      //Stream source

      int[] data = { 10, 20, 30

      };

      // parameter source

      int[] params = { 3, 5, 11

      };

      Convert data to stream

      IntStream targets = Arrays.stream(data);

現(xiàn)在應(yīng)用映射函數(shù)。



     Map<Integer, Integer> results = targets.boxed().collect(

            Collectors.toMap(t -> t, t -> func.apply(t, params)));

      System.out.println(results);

上面的代碼獲取stream并創(chuàng)建一個(gè)映射,其中的數(shù)據(jù)充當(dāng)該數(shù)據(jù),keys然后獲取這些相同的鍵并將它們應(yīng)用于參數(shù)列表的功能。這成為地圖的價(jià)值。


根據(jù)初始流類型,您可能需要使用mapToObj或map代替上述方法。boxed()


查看完整回答
反對 回復(fù) 2023-03-09
?
蠱毒傳說

TA貢獻(xiàn)1895條經(jīng)驗(yàn) 獲得超3個(gè)贊

功能接口(簡單來說)是具有一種方法的接口。


您可能想要注釋接口以@FunctionalInterface記錄其用途,并確保沒有人意外添加其他方法。


方法的名稱并不重要,但當(dāng)然應(yīng)該適合它應(yīng)該做的事情。


因此,如果您需要一個(gè)具有 3 個(gè)參數(shù)的函數(shù),請創(chuàng)建您自己的函數(shù)接口。您可以使用泛型類型參數(shù)使其具體化或通用化。


@FunctionalInterface

interface TripleString {

    String doStringOp(String a, String b, String c);

}


@FunctionalInterface

interface TriFunction<T, U, V, R> {

    R apply(T t, U u, V v);

}


查看完整回答
反對 回復(fù) 2023-03-09
  • 2 回答
  • 0 關(guān)注
  • 189 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)