Scala Future Sequence Mapping:查找长度?

时间:2018-01-09 18:38:57

标签: scala

我想同时返回方法中的Future[Seq[String]]Seq[String]长度。目前我正在使用另一个Future[Seq[String]]的映射函数构建Future[T]

有没有办法在没有等待未来的情况下做到这一点?

2 个答案:

答案 0 :(得分:2)

您可以map覆盖当前Future以创建新的数据,并将新数据添加到该类型中。

val fss: Future[Seq[String]] = Future(Seq("a","b","c"))
val x:   Future[(Seq[String],Int)] = fss.map(ss => (ss, ss.length))

答案 1 :(得分:1)

如果你以某种方式知道Seq的长度是什么而没有实际等待它,那么就像这样;

val t: Future[T] = ???

def foo: (Int, Future[Seq[String]]) = {
  val length = 42 // ???
  val fut: Future[Seq[String]] = t map { v =>
    genSeqOfLength42(v)
  }
  (length, fut)
}

如果你不这样做,那么你必须像jwvh所说的那样返回Future[(Int, Seq[String])],否则你可以在调用函数中轻松获得长度。