gpt4 book ai didi

java - 在条件函数中返回 CompletableFuture

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

我有一个用例,我必须返回 CompletableFuture<Void>来自根据条件组成 2 个 Completable Future 的函数。

以下是我现在拥有的 -

private CompletableFuture<Void> processSomething(final SomeEvent event) {
final CompletableFuture<PaginatedQueryList<Detail>> detail = dao.getData(event.getOrderId());
return detail.thenApply(n -> n.stream()
.filter(i -> i.getBusinessType().equals(BusinessType.AWESOME))
.findFirst()
.filter(i -> i.getLastUpdateEventTimestamp() <= event.getCreationTime())) // This returns Optional<Detail>
.thenCompose(i -> i
.map(o -> deleteItem(event,o))
.orElse(CompletableFuture.completedFuture(null))); // deleteItem is a async call that returns CompletableFuture<Void>
}

社区可以检查并提出任何其他方法吗?
我特别不喜欢明确返回 CompletableFuture.completedFuture(null) .

最佳答案

在 thenCompose 的函数中返回已经完成的 future 并没有什么问题。正如 this answer 中提到的,您还可以使用 CompletableFuture.allOf() 来表示空任务列表,以获得相同的结果。

但是您可以使用 .orElseGet(() -> …) 来避免提前构造完整的 future,即使不需要也是如此。

此外,您可以将 thenApply(...).thenCompose(...) 链替换为单个 thenCompose(...):

private CompletableFuture<Void> processSomething(final SomeEvent event) {
CompletableFuture<PaginatedQueryList<Detail>> detail = dao.getData(event.getOrderId());
return detail.thenCompose(n -> n.stream()
.filter(i -> i.getBusinessType().equals(BusinessType.AWESOME))
.findFirst()
.filter(i -> i.getLastUpdateEventTimestamp() <= event.getCreationTime())
.map(o -> deleteItem(event, o))
.orElseGet(() -> CompletableFuture.completedFuture(null)));
// or .orElseGet(() -> CompletableFuture.allOf()));
// or .orElseGet(CompletableFuture::allOf));

}

关于java - 在条件函数中返回 CompletableFuture<Void>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59220507/

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