Вернуть возвращаемое значение Lambda из метода в Java

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

Проблема здесь заключается в том, как вернуть значение, возвращаемое лямбдой, внутри карты, поскольку методы возвращают значение, поскольку область значения, возвращаемая лямбдой, остается внутри области действия лямды, а не области действия метода.

Также, как я могу использовать switchifempty после вызова метода, который создает проблему при передаче значения элемента на второй шаг

SRP 18.12.2020 22:46

извините, но я понятия не имею, о чем вы спрашиваете, так как я предполагаю, что английский не является вашим основным языком, не могли бы вы уточнить еще больше, в чем заключается ваш вопрос.

Toerktumlare 18.12.2020 23:30

@Toerktumlare Нет ничего подобного, надеюсь, точный вопрос для вышеуказанной проблемы: значение, возвращаемое лямбдой внутри карты, не может использоваться для возврата из метода, поскольку значение, возвращаемое лямбдой, остается внутри области лямды. Надеюсь, это проясняет вопрос ??

SRP 19.12.2020 19:36
Сортировка hashmap по значениям
Сортировка hashmap по значениям
На Leetcode я решал задачу с хэшмапой и подумал, что мне нужно отсортировать хэшмапу по значениям.
0
3
281
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

вы можете использовать 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, получая первую запись для проверки условия критичности.

SRP 19.12.2020 22:28

Расширяя это, чтобы сделать его немного более сложным, если я хочу, чтобы условие 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; }));

SRP 19.12.2020 22:43

Другие вопросы по теме