Return Lambda 从 Java 中的方法返回值
Return Lambda returned value from Method in 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;
}
这里的问题是如何 return 值 return 在地图中由 lamda 编辑为方法 return 值作为由 lamda 编辑的值 return 的范围仍然存在在 lamda 范围内而不是方法范围内。
如果您需要在请求二之前完成请求一,您可以使用 zipWith to combine both results and you will get returned a tuple2 or you can use 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;
}
});
}
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;
}
这里的问题是如何 return 值 return 在地图中由 lamda 编辑为方法 return 值作为由 lamda 编辑的值 return 的范围仍然存在在 lamda 范围内而不是方法范围内。
如果您需要在请求二之前完成请求一,您可以使用 zipWith to combine both results and you will get returned a tuple2 or you can use 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;
}
});
}