Cómo resumir una corriente de CompleteableFuture <BigDecimal> convenientemente?

Brainsucker92:

Estoy buscando una manera de no bloqueo para resumir una corriente de CompleteableFuture<BigDecimal>.

Ya he encontrado temas estrechamente relacionados con este problema, al igual que este . Pero, lamentablemente, en mi caso tengo el BigDecimaltodo en un CompleteableFuture y por lo tanto tengo que esperar a la finalización primero. Al final me gustaría tener otra CompleteableFuture que contiene la suma de todos los futuros dentro de la corriente, una vez que se ha completado.

EDIT: En realidad, yo se las arregló para encontrar la siguiente solución:

Stream<CompletableFuture<BigDecimal>> lotOfWork;
CompletableFuture.supplyAsync(() -> lotOfWork.map(CompletableFuture::join)
                                             .reduce(
                                                 BigDecimal.valueOf(0.0), 
                                                 BigDecimal::add
                                              )
);

Pero como esto no está usando cualquiera de los CompletionStage métodos, estoy bastante seguro de que hay una mejor manera de hacer este trabajo.

Wisthler:

Aquí está la solución con el CompletableFuture :: thenCombine según lo sugerido por usted directamente

Tendría que prefieren una solución que no hace cumplir la orden de reducción, pero no lo encuentras en el Javadoc.

CompletableFuture<BigDecimal> result = lotOfWork.reduce((a,b) -> a.thenCombine(b, BigDecimal::add)).orElse(CompletableFuture.completedFuture(BigDecimal.ZERO));

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=176922&siteId=1
Recomendado
Clasificación