CompleteableFuture <BigDecimalの>便利なのストリームを合計するには?

Brainsucker92:

私はの流れを合計する非ブロック方法を探していますCompleteableFuture<BigDecimal>

私はすでに同様に、密接にこの問題に関連するトピックを見つけ、このしかし、残念ながら、私の場合は私がしているんBigDecimalCompleteableFutureに詰め、したがって、私は、最初の完了を待つ必要があります。最後に、私は、それが完了しますと、ストリーム内のすべての先物の合計が含まれている別の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));

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=176919&siteId=1