[英]Scala - Future.sequence on Tuples
我有一个元组序列:
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.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)]]
这里给出的答案很好,但我认为Future.traverse
在这里会更简洁:
Future.traverse(seqTuple) {
case (s1, s2Future) => s2Future.map{ s2 => (s1, s2) }
}
此函数涉及转换输入参数:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.