Scala - 元组上的 Future.sequence

标签 scala future

我有一个元组序列:

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/

    相关文章:

    scala - 如何将“丰富我的图书馆”模式应用于Scala集合?

    scala - 用于更好地链接收集的功能模式

    scala - 避免生成默认的 setter getter

    c++ - std::future::get() 或 std::future::wait() 是 std::thread::join() 的替代品吗?

    scala - 在 Scala/Spark 的 HDFS 上将文件从一个文件夹移动到另一个文件夹

    parsing - Scala 解析器组合器,解析器因优先级而失败

    java - 是否有更有效的方法从多线程过程中获取 "future"结果?

    scala - 使用 Scala future 时,是否会将具有相同执行上下文的链式回调优化为同步调用?

    rust - 为什么放弃这个 SpawnHandle 不会取消它的 future ?

    dart - 如何将 future 结果与 flutter 中的流连接起来?