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)
| 归档时间: |
|
| 查看次数: |
84 次 |
| 最近记录: |