我有时会发现自己有一些Stream[X]
, 和 a function X => Future Y
, 我想将它们合并到 aFuture[Stream[Y]]
中,但我似乎无法找到一种方法来做到这一点。例如,我有
val x = (1 until 10).toStream
def toFutureString(value : Integer) = Future(value toString)
val result : Future[Stream[String]] = ???
我试过了
val result = Future.Traverse(x, toFutureString)
这给出了正确的结果,但似乎在返回 Future 之前消耗了整个流,这或多或少地打败了 purpse
我试过了
val result = x.flatMap(toFutureString)
但这不能编译type mismatch; found : scala.concurrent.Future[String] required: scala.collection.GenTraversableOnce[?]
val result = x.map(toFutureString)
返回有些奇怪和无用的Stream[Future[String]]
我应该在这里做什么来解决问题?
编辑:我没有被困在 a 上Stream
,我同样会对 an 上的相同操作感到满意Iterator
,只要它不会在开始处理头部之前阻止评估所有项目
Edit2:我不能 100% 确定 Future.Traverse 构造是否需要在返回 Future[Stream] 之前遍历整个流,但我认为确实如此。如果没有,这本身就是一个很好的答案。
Edit3:我也不需要结果是有序的,无论返回的流或迭代器是什么顺序,我都可以。