Java 8 a une fonction CompletableFuture.allOf(CompletableFuture<?>...cfs)
qui renvoie un CompletableFuture
qui est terminé lorsque tous les futurs donnés sont terminés.
Cependant, je n'ai presque toujours pas affaire à un tableau de CompletableFuture
s, mais plutôt à un List<CompletableFuture>
. Bien sûr, je peux utiliser la méthode toArray()
, mais cela devient un peu pénible de devoir constamment convertir en aller-retour entre tableaux et listes.
Ce serait vraiment bien s'il y avait un moyen astucieux d'obtenir un CompletableFuture<List<T>>
En échange d'un List<CompletableFuture<T>>
, Au lieu de devoir constamment lancer une création de tableau intermédiaire. Est-ce que quelqu'un connaît un moyen de faire cela dans Java 8?
Malheureusement, à ma connaissance, CompletableFuture ne prend pas en charge les collections.
Vous pouvez faire quelque chose comme ceci pour rendre le code un peu plus propre, mais il fait essentiellement la même chose
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())
);
}
J'ai trouvé ceci très informatif: http://www.nurkiewicz.com/2013/05/Java-8-completablefuture-in-action.html