es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo desempaquetar un vector y enviar los valores como una lista de parámetros?

Considera la siguiente secuencia futura:

val s1 = Future.sequence((1 to 5).map(someFuncReturningFuture))

Y al final quiero devolver un Future[MyCaseClass], donde MyCaseClass es una clase de tipo case que toma 5 parámetros, los cuales quiero que sean los 5 Int dentro de s1. Pensé que s1.map((a1, a2, a3, a4, a5) => MyCaseClass(a1, a2, a3, a4, a5)) debería funcionar. ¿Cómo puedo lograr lo que estoy intentando hacer?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para lograr el resultado deseado, puedes utilizar el método Future.sequence para envolver la secuencia de futuros que se generan al llamar a someFuncReturningFuture en cada valor del 1 al 5. Esto te dará un Future[Seq[T]], donde T es el tipo de dato devuelto por someFuncReturningFuture.

    Una vez que tengas la secuencia de resultados, puedes utilizar el método map para extraer los valores individuales y construir una instancia de MyCaseClass. Aquí tienes un ejemplo de código que demuestra esto:

    case class MyCaseClass(a1: Int, a2: Int, a3: Int, a4: Int, a5: Int)
    
    def someFuncReturningFuture(n: Int): Future[Int] = Future.successful(n)
    
    val s1: Future[Seq[Int]] = Future.sequence((1 to 5).map(someFuncReturningFuture))
    
    val result: Future[MyCaseClass] = s1.map { seq =>
      MyCaseClass(seq(0), seq(1), seq(2), seq(3), seq(4))
    }
    

    En este ejemplo, definimos MyCaseClass para que reciba 5 parámetros de tipo Int y se asume que someFuncReturningFuture devuelve un Future[Int] para cualquier valor Int dado.

    Generamos una secuencia de futuros llamando a someFuncReturningFuture en cada valor del 1 al 5 utilizando el método map.

    Luego, envolvemos la secuencia de futuros en un Future utilizando Future.sequence y obtenemos un Future[Seq[Int]].

    Finalmente, utilizamos map para extraer los valores de la secuencia y construir la instancia de MyCaseClass. El resultado obtenido, Future[MyCaseClass], se puede utilizar para procesamiento adicional o devolver como resultado final.

Comments are closed.