Java 8 CompletableFuture.allOf(…) con Colección o Lista
completablefuture java (1)
Desafortunadamente, a mi entender, los futuros completos no admiten colecciones.
Puedes hacer algo como esto para hacer que el código sea un poco más limpio, pero esencialmente hace lo mismo:
public <T> CompletableFuture<List<T>> allOf(List<CompletableFuture<T>> futuresList) {
CompletableFuture<Void> allFuturesResult =
CompletableFuture.allOf(futuresList.toArray());
return allFuturesResult.thenApply(v ->
futuresList.stream().
map(future -> future.join()).
collect(Collectors.<T>toList())
);
}
Encontré esto muy informativo: http://www.nurkiewicz.com/2013/05/java-8-completablefuture-in-action.html
Esta pregunta ya tiene una respuesta aquí:
- Lista <Future> a la secuencia Future <List> 8 respuestas
Java 8 tiene una función CompletableFuture.allOf(CompletableFuture<?>...cfs)
que devuelve un CompletableFuture
que se completa cuando se completan todos los futuros dados.
Sin embargo, casi siempre no trato con una matriz de CompletableFuture
s, sino que tengo una List<CompletableFuture>
. Por supuesto, puedo usar el método toArray()
, pero esto termina siendo un poco toArray()
tener que convertir constantemente de un lado a otro entre arreglos y listas.
Sería muy bueno si hubiera una manera fácil de obtener un CompletableFuture<List<T>>
a cambio de un List<CompletableFuture<T>>
, en lugar de tener que lanzar constantemente una creación de matriz intermedia. ¿Alguien sabe una manera de hacer esto en Java 8?