У меня есть этот метод, который вызывает несколько API, объединяет все результаты и возвращает их на карте, где каждый набор результатов сопоставляется с целевым 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 иметь более 1 параметра? Но примеры BiFunctions показывают, что они используются только как лямбды и поэтому не работаютпри вызове внешним методом, из того, что я смог найти.Кроме того, когда речь идет о создании нового FunctionalInterface, я не уверен, что именно нужно, чтобы иметь возможность использовать новый интерфейс в моих необходимых функциях.
Любые идеи были бы хорошими.