gpt4 book ai didi

具有可从方法调用的三个参数的 Java 函数

转载 作者:行者123 更新时间:2023-12-02 01:26:03 24 4
gpt4 key购买 nike

我有一个方法,可以调用多个 API 并聚合所有结果,并将它们返回到一个 Map 中,其中每组结果都与目标 API 匹配,以便它们可以在服务中正确分组和显示。

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;
}

我现在必须重构这段代码,以便可以在一个函数中调用 API 1 - 3,然后可以从另一个函数调用 API 4 - N。这些函数将从不同的方法中调用,因此我需要将此函数移出此方法,然后将 QueryParams 对象作为另一个参数传递给该函数,但随后我遇到了该函数无法接受超过一个参数。例如

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();
};

我在这里看到过类似的内容:Can a java lambda have more than 1 parameter?但 BiFunctions 的示例仅显示它们被用作 lambda,因此根据我的发现,当由外部方法调用时它们将不起作用。另外,当谈到创建新的 FunctionInterface 时,我不确定到底需要什么才能在我所需的函数中使用新接口(interface)。

任何想法都会很棒。

最佳答案

修改以反射(reflect)示例

首先,定义一些必需的BiFunction


BiFunction<Integer, int[], Integer> func = (a, b) ->
{
for (int i = 0; i < b.length; i++) {
a *= b[i];
}
return Integer.valueOf(a);
};


现在定义一些数据。

      //Stream source
int[] data = { 10, 20, 30
};
// parameter source
int[] params = { 3, 5, 11
};
Convert data to stream
IntStream targets = Arrays.stream(data);

现在应用映射函数。


Map<Integer, Integer> results = targets.boxed().collect(
Collectors.toMap(t -> t, t -> func.apply(t, params)));
System.out.println(results);

上面的代码采用并创建一个映射,其中数据充当,然后采用这些相同的键并将它们应用到带有参数列表的函数。这将成为 map 的值(value)。

您可能需要使用 mapToObjmap 代替上面的 boxed() 方法,具体取决于初始流类型。

关于具有可从方法调用的三个参数的 Java 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56907076/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com