我正在寻找一种非阻塞的方式来汇总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/