Java 如果现在正确使用
我试图在这里使用ifPresent,但无法使其工作 这是代码Java 如果现在正确使用,java,java-8,optional,Java,Java 8,Optional,我试图在这里使用ifPresent,但无法使其工作 这是代码 final Optional<GenericApiGatewayResponse> apiGatewayResponse = getQueryEventsCallResponse(apiGatewayRequest); apiGatewayResponse.ifPresent(this::getQueryEvents); private Optional<QueryEventsResponse> getQue
final Optional<GenericApiGatewayResponse> apiGatewayResponse = getQueryEventsCallResponse(apiGatewayRequest);
apiGatewayResponse.ifPresent(this::getQueryEvents);
private Optional<QueryEventsResponse> getQueryEvents(final GenericApiGatewayResponse apiGatewayResponse) {
try {
return Optional.of(gson.fromJson(apiGatewayResponse.getBody(), QueryEventsResponse.class));
} catch (final Exception e) {
log.error("QueryEventsResponseDeserializationFailure : Failure " +
"while deserialize of QueryEvents from GenericApiGatewayResponse", e);
}
return Optional.empty();
}
private Optional<GenericApiGatewayResponse> getQueryEventsCallResponse(final GenericApiGatewayRequest request) {
try {
return Optional.of(apiGatewayClient.execute(request));
} catch(final Exception e) {
log.error("QueryEventsCallError : Error during invoke of QueryEvents API Gateway", e);
}
return Optional.empty();
}
最终可选apiGatewayResponse=GetQueryEventCallResponse(apiGatewayRequest);
apiGatewayResponse.ifPresent(this::getQueryEvents);
私有可选getQueryEvents(最终通用PiGatewayResponse apiGatewayResponse){
试一试{
返回可选的.of(gson.fromJson(apiGatewayResponse.getBody(),QueryEventsResponse.class));
}捕获(最终异常e){
log.error(“QueryEventsResponseDeserializationFailure:失败”+
“当从GenericApiGatewayResponse反序列化查询事件时”,e);
}
返回可选的.empty();
}
私有可选GetQueryEventCallResponse(最终通用PigateWayRequest请求){
试一试{
返回可选的.of(apiGatewayClient.execute(request));
}捕获(最终异常e){
log.error(“QueryEventsCallError:调用QueryEvents API网关时出错”,e);
}
返回可选的.empty();
}
但是我想得到ifPresent的响应作为可选的。但是ifPresent不允许您返回任何内容。您需要使用的方法是
flatMap
。请尝试以下操作:
可选apiGatewayResponseOptional=GetQueryEventCallResponse(apiGatewayRequest);
可选queryEventsResponseOptional=apiGatewayResponseOptional.flatmap(this::getQueryEvents);
可选。ifPresent()
是一种在可选项中存储的值上存在可选项时添加效果的方法。它不能有任何返回值,因为在Java中,您不能通过返回值->重载方法,因此它使用void,只允许您执行副作用,例如打印可选的包含的值
您仍然可以使用:
if (!optional.isEmpty()) {
this.getQueryEvents(optional.get())
}
或:
optional.flatMap(containedVal -> this.getQueryEvents(containedVal));