Brainsucker92:
私はの流れを合計する非ブロック方法を探していますCompleteableFuture<BigDecimal>
。
私はすでに同様に、密接にこの問題に関連するトピックを見つけ、この。しかし、残念ながら、私の場合は私がしているんBigDecimal
CompleteableFutureに詰め、したがって、私は、最初の完了を待つ必要があります。最後に、私は、それが完了しますと、ストリーム内のすべての先物の合計が含まれている別のCompleteableFutureを取得したいと思います。
編集:実は私は、次の解決策を見つけるために管理しました:
Stream<CompletableFuture<BigDecimal>> lotOfWork;
CompletableFuture.supplyAsync(() -> lotOfWork.map(CompletableFuture::join)
.reduce(
BigDecimal.valueOf(0.0),
BigDecimal::add
)
);
しかし、これは、任意の使用していないのでCompletionStageの方法を、私はかなり確信して、この仕事をするためにも、より良い方法がありますよ。
Wisthler:
直接あなたによって示唆されているようにここでCompletableFuture :: thenCombineを持つソリューションです
私は、削減の順序を強制しませんが、javadocのそれを見つけることができませんでしたソリューションを好むだろう。
CompletableFuture<BigDecimal> result = lotOfWork.reduce((a,b) -> a.thenCombine(b, BigDecimal::add)).orElse(CompletableFuture.completedFuture(BigDecimal.ZERO));