【发布时间】:2019-12-06 21:24:05
【问题描述】:
我有一个用例,我必须从一个基于条件组成 2 个 Completable Futures 的函数返回一个 CompletableFuture<Void>。
以下是我现在拥有的 -
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)。
【问题讨论】:
-
对我来说这段代码非常好。当您必须返回一个
CompletableFuture但您只能有条件地得到一个时,您唯一的选择是在另一种情况下返回一个已经完成的未来,但这完全没问题。请注意,它可能更适合 Code Review,因为您的代码已经可以工作了。 -
@DidierL 感谢您的 cmets,这里和下面的建议答案。另外,感谢 Code Review 网站,我不知道这一点,但现在我知道了。谢谢。
标签: java asynchronous java-8 completable-future