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

我已经找到了与该问题密切相关的主题,例如this
但是不幸的是,我确实将BigDecimal打包到CompleteableFuture中,因此我需要首先等待完成。
最后,我想获得另一个CompleteableFuture,它包含Stream中所有Future的总和,一旦完成。

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

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));

关于java - 如何方便地总结一个CompleteableFuture <BigDecimal>流?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55858266/

10-09 03:17