Java 如果现在正确使用

Java 如果现在正确使用,java,java-8,optional,Java,Java 8,Optional,我试图在这里使用ifPresent,但无法使其工作 这是代码 final Optional<GenericApiGatewayResponse> apiGatewayResponse = getQueryEventsCallResponse(apiGatewayRequest); apiGatewayResponse.ifPresent(this::getQueryEvents); private Optional<QueryEventsResponse> getQue

我试图在这里使用ifPresent,但无法使其工作

这是代码

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