我正在寻找一种非阻塞方式来总结CompleteableFuture<BigDecimal>
的流。
我已经找到了与这个问题密切相关的话题,比如this。但不幸的是,在我的情况下,我确实将BigDecimal
打包成一个CompleteableFuture,因此我需要先等待完成。最后,我想获得另一个CompleteableFuture,其中包含Stream中所有Futures的总和,一旦完成。
编辑:其实我确实设法找到以下解决方案:
Stream<CompletableFuture<BigDecimal>> lotOfWork;
CompletableFuture.supplyAsync(() -> lotOfWork.map(CompletableFuture::join)
.reduce(
BigDecimal.valueOf(0.0),
BigDecimal::add
)
);
但由于这不使用任何CompletionStage方法,我很确定有更好的方法来完成这项工作。
以下是您直接建议的CompletableFuture :: thenCombine解决方案
我宁愿选择一种不强制执行减少顺序但却没有在javadoc中找到它的解决方案。
CompletableFuture<BigDecimal> result = lotOfWork.reduce((a,b) -> a.thenCombine(b, BigDecimal::add)).orElse(CompletableFuture.completedFuture(BigDecimal.ZERO));