2017-11-09 5 views
0

Ich bin auf der Suche nach einer Möglichkeit, eine Vector[(Future[TypeA], TypeB)] in einen Code hier Future[Vector[(TypeA, TypeB)]] konvertieren.Scala: Konvertieren Sie einen Vektor von Tupel mit einer Zukunft in eine Zukunft eines Vektors von Tupeln

Ich bin mir der Umwandlung einer Sammlung von Futures in eine Zukunft einer Sammlung mit Future.sequence(...) bewusst, kann aber keinen Weg finden, den Schritt vom Tupel mit einer Zukunft zu einer Zukunft von Tupel zu verwalten.

Ich bin also auf der Suche nach etwas, das die gewünschte Funktionalität des Dummy extractFutureFromTuple im Folgenden implementiert.

val vectorOfTuples: Vector[(Future[TypeA], TypeB)] = ... 
val vectorOfFutures: Vector[Future[(TypeA, TypeB)]] = vectorOfTuples.map(_.extractFutureFromTuple) 
val futureVector: Future[Vector[(TypeA, TypeB)]] = Future.sequence(vectorOfFutures) 
+0

'Tupel => tuple._1.map (_ -> tuple._2)' – Dima

+0

perfekt, dass die tat Trick! Danke vielmals – DentArthurDent

Antwort

2

Beachten Sie, dass dies mit einem einzigen Aufruf Future.traverse tun können:

val input: Vector[(Future[Int], Long)] = ??? 
val output: Future[Vector[(Int, Long)]] = Future.traverse(input) { 
    case (f, v) => f.map(_ -> v) 
} 
Verwandte Themen