簡體   English   中英

Scala - 元組上的 Future.sequence

[英]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)} }
)

一步一步,從內項到外項:

  1. 內部mapFuture("X")轉換為Future(("A", "X"))
  2. 外部map將每個("A", Future("X"))轉換為Future(("A", "X")) ,從而為您提供Seq[Future[(String, String)]]
  3. 現在你可以使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM