Saltar al contenido

¿Por qué CompletableFuture.allOf se declara como CompletableFuture??

Nuestros mejores desarrolladores han agotado sus depósitos de café, buscando noche y día por la solución, hasta que Lola encontró la contestación en Beanstalk así que en este momento la comparte aquí.

Solución:

anyOf tiene que decirle de alguna manera cuál fue el resultado de la específica CompletableFuture cuya finalización desencadenó anyOf. Eso no es necesario en caso de allOf porque sabes qué futuros se completaron, todos ellos.

allOf (Tal como anyOf) no requiere que todos los futuros tengan el mismo tipo. Entonces, si fuera a devolver un futuro de colección, tendría que ser una colección de Object que probablemente no es lo que quieres de todos modos.

Si realmente quieres tener allOf devolver un futuro de la colección, es bastante sencillo escribir el tuyo propio:

public static CompletableFuture> myAllOf(CompletableFuture... futures) 
     return CompletableFuture.allOf(futures)
            .thenApply(x -> Arrays.stream(futures)
                    .map(f -> (Object) f.join())
                    .collect(toList())
            );

Si tiene una versión de tipo seguro de este problema y necesita convertir una colección de futuros de cierto tipo en una colección futura de ese mismo tipo, consulte esta pregunta para ver varios ejemplos: Lista al futuro secuencia

Comentarios y calificaciones del post

Recuerda algo, que tienes autorización de valorar este escrito si diste con el hallazgo.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *