public DetailsResponse common(String customerId, String personId) {
Capabilities capabilities = new Capabilities();
Details details = new Details();
DetailsResponse detailsResponse = new DetailsResponse();
consume("590204", "4252452")
.map(items -> items.get(0))
.flatMap(item -> {
return actions("432432", "1241441")
.map(ev -> {
switch (item.getCriticality()) {
case "HIGH":
case "VERY HIGH":
capabilities.setBan_hash("false");
capabilities.setI("false");
capabilities.setK("false");
details.setCriticality(item.getCriticality());
details.setHostname(item.getNames().get(0).getName());
detailsResponse.setCapabilities(capabilities);
detailsResponse.setDetails(details);
return detailsResponse;
default:
capabilities.setk(ev.get(con.getAlertCapabilitiesAndAssetDetails().getFields().get()));
capabilities.setI(ev.get(con.getAssetDetails().getFields().get()));
capabilities.setl(ev.get(con.getAlertCapabilitiesAndAssetDetails().getFields().get()));
details.setCriticality(item.getCriticality());
details.setHostname(item.getNames().get(0).getName());
detailsResponse.setCapabilities(capabilities);
capabilitiesAndAssetDetailsResponse.setDetails(asset);
detailsResponse.setDeviceid("");
return detailsResponse;
}
});
}).subscribe();
return detailsResponse;
}
Проблема здесь заключается в том, как вернуть значение, возвращаемое лямбдой, внутри карты, поскольку методы возвращают значение, поскольку область значения, возвращаемая лямбдой, остается внутри области действия лямды, а не области действия метода.
извините, но я понятия не имею, о чем вы спрашиваете, так как я предполагаю, что английский не является вашим основным языком, не могли бы вы уточнить еще больше, в чем заключается ваш вопрос.
@Toerktumlare Нет ничего подобного, надеюсь, точный вопрос для вышеуказанной проблемы: значение, возвращаемое лямбдой внутри карты, не может использоваться для возврата из метода, поскольку значение, возвращаемое лямбдой, остается внутри области лямды. Надеюсь, это проясняет вопрос ??

вы можете использовать zipWith , чтобы объединить оба результата, и вам будет возвращен tuple2 , или вы можете использовать zipWhen, если вам нужно выполнить один запрос перед вторым запросом.
public Mono<DetailsResponse> common(String customerId, String personId) {
return consume("590204", "4252452").zipWith(actions("432432", "1241441"))
.flatMap(responses -> {
final item = responses.getT1();
final ev = responses.getT2();
final Capabilities capabilities = new Capabilities();
final Details details = new Details();
final DetailsResponse detailsResponse = new DetailsResponse();
switch (item.getCriticality()) {
case "HIGH":
case "VERY HIGH":
...
return detailsResponse;
default:
...
return detailsResponse;
}
});
}
Спасибо @Toerktumlare, которые действительно помогли, так как я новичок в этом реакторе и прочем. Я использовал zipwith и tuple2, получая первую запись для проверки условия критичности.
Расширяя это, чтобы сделать его немного более сложным, если я хочу, чтобы условие switchifempty после возврата строки потребляло ("5", "42").zipWith(actions("43", "124")) ниже, та же проблема, что и можно сделать return consume(customerId, deviceId) /.switchIfEmpty(Mono.defer(() -> { actionsPermissions("PR00002997", "PR0000000028479").map(ev -> { ev.get(0); ...... return capabilitiesAndAssetDetailsResponse; }); return capabilitiesAndAssetDetailsResponse; }));
Также, как я могу использовать switchifempty после вызова метода, который создает проблему при передаче значения элемента на второй шаг