我有一个元组序列:
val seqTuple: Seq[(String, Future[String])] = Seq(("A", Future("X")), ("B", Future("Y")))
我想得到:
val futureSeqTuple: Future[Seq[(String, String)]] = Future(Seq(("A", "X"), ("B", "Y")))
我知道我可以做到:
val futureSeq: Future[Seq[String]] = Future.sequence(seqTuple.map(_._2))
但我丢失了元组中的第一个字符串。
获得
Future[Seq[(String, String)]]
的最佳方式是什么? ?
最佳答案
首先使用元组中的 future 将每个元组映射到元组的 future ,
然后顺序:
Future.sequence(
seqTuple.map{case (s1, fut_s2) => fut_s2.map{s2 => (s1, s2)} }
)
一步一步,从内部术语到外部术语:
map
转换 Future("X")
至 Future(("A", "X"))
. map
转换每个 ("A", Future("X"))
成Future(("A", "X"))
,从而给你一个 Seq[Future[(String, String)]]
. sequence
在那获得Future[Seq[(String, String)]]
关于Scala - 元组上的 Future.sequence,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49122579/