[英]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.