如何方便地汇总CompleteableFuture <BigDecimal>流?

Bra*_*r92 6 java asynchronous java-stream

我正在寻找一种非阻塞的方式来汇总的流CompleteableFuture<BigDecimal>

我已经找到与之密切相关的问题的话题,像这样。但不幸的是,我确实将其BigDecimal打包到CompleteableFuture中,因此我需要首先等待完成。最后,我想获得另一个CompleteableFuture,包含完成后流中所有期货的总和。

编辑: 实际上我确实设法找到以下解决方案:

Stream<CompletableFuture<BigDecimal>> lotOfWork;
CompletableFuture.supplyAsync(() -> lotOfWork.map(CompletableFuture::join)
                                             .reduce(
                                                 BigDecimal.valueOf(0.0), 
                                                 BigDecimal::add
                                              )
);
Run Code Online (Sandbox Code Playgroud)

但是,由于这没有使用任何CompletionStage方法,因此我很确定有更好的方法来完成此工作。

小智 1

这是您直接建议的 CompletableFuture::thenCombine 的解决方案

我更喜欢一个不强制减少顺序但在 javadoc 中没有找到它的解决方案。

CompletableFuture<BigDecimal> result = lotOfWork.reduce((a,b) -> a.thenCombine(b, BigDecimal::add)).orElse(CompletableFuture.completedFuture(BigDecimal.ZERO));
Run Code Online (Sandbox Code Playgroud)