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)
を試してみました、多かれ少なかれ敗北purpse
試しました
val result = x.flatMap(toFutureString)
しかし、それはとコンパイルされません
val result = x.map(toFutureString)
はやや奇妙と無用を返しStream[Future[String]]
物事が固定取得する私はここに何をすべきか?
編集:私はStream
に引っかかっていないよ、私は限りそれは頭
Iterator
上の同じ操作と同じように幸せになりたいです
Edit2:Future.TraverseコンストラクトがFuture [Stream]を返す前にストリーム全体を走査する必要があるとは100%確信していませんが、私はそうすると思います。そうでなければ、それはそれ自体素晴らしい答えです。
Edit3:私はまた、結果を順序どおりにする必要はありません。私はストリームやイテレータでどんな順序でも返されます。
下記の私の回答をフォローアップするために[問題](https://issues.scala-lang.org/browse/SI-7718)を提出しました。 –
ああ、素晴らしい@TravisBrown。私は自分自身でそれをしたいと思っていましたが、私はJiraにログインする方法を見つけることができませんでした – Martijn
少し不明です - 前のコレクションのすべての要素に "toFutureString"を適用しないようにしたいですか?未来を創造するだけのオーバーヘッドはありません。 「リスト」の残りの項目がサンクであれば、評価はどのようにトリガーされますか?リストの中の未来の完成? Scalaで見つけることができるすべてのシーケンス/トラバース操作は、個々のリスト要素に対して厳密に見えました。 – pdxleif