有时我发现自己处于这样的境地:Stream[X]
, and a function X => Future Y
,我想组合成一个Future[Stream[Y]]
,而且我似乎找不到办法做到这一点。例如,我有
val x = (1 until 10).toStream
def toFutureString(value : Integer) = Future(value toString)
val result : Future[Stream[String]] = ???
I tried
val result = Future.Traverse(x, toFutureString)
它给出了正确的结果,但似乎在返回 Future 之前消耗了整个流,这或多或少地破坏了目的
I tried
val result = x.flatMap(toFutureString)
但这不能编译type mismatch; found : scala.concurrent.Future[String] required: scala.collection.GenTraversableOnce[?]
val result = x.map(toFutureString)
返回有点奇怪和无用的Stream[Future[String]]
我应该在这里做什么来解决问题?
编辑:我没有陷入困境Stream
,我对在Iterator
,只要在开始处理头部之前它不会阻止评估所有项目
Edit2:我不是 100% 确定 Future.Traverse 构造需要在返回 Future[Stream] 之前遍历整个流,但我认为确实如此。如果没有,这本身就是一个很好的答案。
Edit3:我也不需要结果按顺序排列,我对返回的流或迭代器的顺序很满意。