【问题标题】:Return Lambda returned value from Method in Java从 Java 中的方法返回 Lambda 返回值
【发布时间】:2020-12-18 17:02:58
【问题描述】:
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;
    }

这里的问题是如何将 lamda 返回的值在 map 中作为方法返回值返回,因为 lamda 返回的值的范围仍然在 lamda 范围内,而不是在方法范围内。

【问题讨论】:

  • 另外,在方法调用消耗后如何使用 switchifempty,这会在将项目值传递给第二步时产生问题
  • 对不起,但我不知道你在问什么,因为我猜英语不是你的主要语言,你能否进一步澄清你的问题。
  • @Toerktumlare 没有类似的,希望针对上述相关问题的明确问题是 lamda 在 map 中返回的值不能用于从方法返回,因为 lamda 返回的值仍然在 lamda 范围内。希望澄清问题??

标签: lambda java-8 spring-webflux reactive


【解决方案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 获得了第一条记录来检查临界条件。
  • 扩展这个,让它更复杂一点,如果我想在线路返回消耗(“5”,“42”).zipWith(动作(“43”,“124” )) 下面,同样的问题如何做到return consume(customerId, deviceId) /.switchIfEmpty(Mono.defer(() -&gt; { actionsPermissions("PR00002997", "PR0000000028479").map(ev -&gt; { ev.get(0); ...... return capabilitiesAndAssetDetailsResponse; }); return capabilitiesAndAssetDetailsResponse; }));
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-27
  • 2014-06-17
  • 2021-05-10
  • 2012-12-18
  • 2012-05-10
  • 1970-01-01
  • 2013-08-21
相关资源
最近更新 更多