Stream[X]
と を組み合わせてに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]] = ???
私は試した
val result = Future.Traverse(x, toFutureString)
これは正しい結果をもたらしますが、Future を返す前にストリーム全体を消費しているように見えます。
私は試した
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: Future.Traverse コンストラクトが Future[Stream] を返す前にストリーム全体をトラバースする必要があることを 100% 確信しているわけではありませんが、そうなっていると思います。そうでない場合、それ自体は素晴らしい答えです。
Edit3: また、結果が順序どおりである必要はありません。返されたストリームまたはイテレータがどのような順序であっても問題ありません。