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

时间:2019-04-25 22:08:09

标签: java asynchronous java-stream

我正在寻找一种非阻塞方式来汇总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方法,因此,我敢肯定有一种更好的方法可以完成这项工作。

1 个答案:

答案 0 :(得分:1)

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

我宁愿不强制执行归约顺序但在javadoc中找不到归约顺序的解决方案。

format