[英]Scala - Future.sequence on Tuples
I have a Seq of Tuples:我有一个元组序列:
val seqTuple: Seq[(String, Future[String])] = Seq(("A", Future("X")), ("B", Future("Y")))
and I want to get:我想得到:
val futureSeqTuple: Future[Seq[(String, String)]] = Future(Seq(("A", "X"), ("B", "Y")))
I know I can do:我知道我能做到:
val futureSeq: Future[Seq[String]] = Future.sequence(seqTuple.map(_._2))
but I am losing the first String in the Tuple.但我丢失了元组中的第一个字符串。
What is the best way to get a Future[Seq[(String, String)]]
?获得
Future[Seq[(String, String)]]
的最佳方法是什么?
Use the futures in tuples to map each tuple to future of tuple first, then sequence:首先使用元组中的未来将每个元组映射到元组的未来,然后是序列:
Future.sequence(
seqTuple.map{case (s1, fut_s2) => fut_s2.map{s2 => (s1, s2)} }
)
Step by step, from inner terms to outer terms:一步一步,从内项到外项:
map
converts Future("X")
to Future(("A", "X"))
.map
将Future("X")
转换为Future(("A", "X"))
。map
converts each ("A", Future("X"))
into an Future(("A", "X"))
, thus giving you a Seq[Future[(String, String)]]
.map
将每个("A", Future("X"))
转换为Future(("A", "X"))
,从而为您提供Seq[Future[(String, String)]]
。sequence
on that to obtain Future[Seq[(String, String)]]
sequence
来获得Future[Seq[(String, String)]]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.