我有这种调用多个 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();
};
我在这里看到过类似的东西:Java lambda 可以有多个参数吗? 但是 BiFunctions 的示例仅显示它们被用作 lambda,因此在被外部方法调用时不会起作用,据我所知。此外,当它谈到创建一个新的 FunctionalInterface 时,我不确定究竟需要什么才能在我需要的功能中使用新接口。
任何想法都会很棒。
米脂
蛊毒传说
相关分类