gpt4 book ai didi

Java可选接口(interface): Nested conditions on Optional object chain

转载 作者:行者123 更新时间:2023-12-02 10:05:15 25 4
gpt4 key购买 nike

我想再次将此代码编写为完整的可选流畅方法,以便做到这一点:

Optional<Reference> reference = this.referenceService.get(id);
if (!reference.isPresent()) {
return Response.status(Status.NOT_FOUND).build();
}

EntityTag entityTag = this.eTag(reference.get());
ResponseBuilder responseBuilder = this.request.evaluatePreconditions(entityTag);

if (Objects.isNull(responseBuilder)) {
responseBuilder = Response
.ok()
.entity(reference.get())
.cacheControl(this.cacheControl)
.tag(entityTag);
}

return responseBuilder.build();

到目前为止,我已经能够做到这一点:

return this.referenceService.get(id)
.map(this::eTag)
.map(this.request::evaluatePreconditions)
.orElse(Response.status(Status.NOT_FOUND))
.cacheControl(this.cacheControl)
.tag(this.eTag(this.referenceService.get(id).get()))
.build();

但是这段代码与之前的代码不同。

我有两个条件需要处理:

if (!reference.isPresent()) {
return Response.status(Status.NOT_FOUND).build();
}

if (Objects.isNull(responseBuilder)) {

我不太明白如何解决这个问题。

有什么想法吗?

最佳答案

第一个条件 if (!reference.isPresent()).orElse(Response.status(Status.NOT_FOUND)) 覆盖

覆盖第二个条件if (Objects.isNull(responseBuilder)) 根据 this.request.evaluatePreconditions(entityTag) 的结果创建一个Optional,然后创建一个orElseGet来返回ok构建器

下面的代码是我凭空写的,我没有测试

this.referenceService
.get(id)
.map(this::eTag)
.map(entityTag -> Optional.ofNullable(this.request.evaluatePreconditions(entityTag))
.orElseGet(() -> Response.ok()
.entity(entityTag)
.cacheControl(this.cacheControl)
.tag(entityTag)))
.orElse(Response.status(Status.NOT_FOUND))
.buld();

为了简化表达式,可以在方法中重构 Optional.ofNullable(...).orElseGet(...) 部分并调用该方法,而不是全部内联

如下所示

private ResponseBuilder getBuilderOrDefault(EntityTag entityTag) {
return Optional.ofNullable(this.request.evaluatePreconditions(entityTag))
.orElseGet(() -> Response.ok()
.entity(entityTag)
.cacheControl(this.cacheControl)
.tag(entityTag));
}

映射将变为

this.referenceService
.get(id)
.map(this::eTag)
.map(this::getBuilderOrDefault)
.orElse(Response.status(Status.NOT_FOUND))
.buld();

关于Java可选接口(interface): Nested conditions on Optional object chain,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55375289/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com