Bazen kendimi Stream[X]
ve function X => Future Y
, Future[Stream[Y]]
ile birleştirmek istediğim bir durumda buluyorum ve bir yol bulamıyorum. yapmak için. Mesela benBir Akışı bir Geleceğe döndüren bir işlevle eşleme
val x = (1 until 10).toStream
def toFutureString(value : Integer) = Future(value toString)
val result : Future[Stream[String]] = ???
Ben doğru sonucu verir ama Future, dönmeden önce tüm akışı tüketmek gibi görünüyor
val result = Future.Traverse(x, toFutureString)
çalıştı sahip olan az ya da çok yenilgiler amaçlı labaratuvar
'u denedim, ancak buile derlenmiyor
val result = x.map(toFutureString)
biraz garip ve yararsız döndürür Stream[Future[String]]
şey düzelttirmek Burada ne yapmalıyım?
Düzenleme: Ben Stream
sıkışmış değilim, ben kafasını
Iterator
aynı işlemle aynı derecede mutlu olurdu
Edit2: Future.Traverse yapısının bir geleceği geri göndermeden önce tüm akışı geçmesi gerektiğinden% 100 emin değilim [Stream], ama bence öyle. Eğer değilse, bu kendi başına iyi bir cevap.
Edit3: Sırayla olması için sonuca da ihtiyacım yok, akışta sorun yok veya yineleyici ne olursa olsun iade edildi.
Aşağıdaki cevabımı takip etmek için [bir sorun] (https://issues.scala-lang.org/browse/SI-7718) başvurduğumu unutmayın. –
ah, harika @TravisBrown. Bunu kendim yapmak istedim, ama Jira – Martijn
'a giriş yapmanın bir yolunu bulamadım Biraz belirsiz - daha önce koleksiyondaki tüm öğelere "toFutureString" uygulamasından kaçınmak mı istiyorsunuz? Görünüşe göre, bir Gelecek yaratmak için fazla mesai olmamalı. "Liste" deki kalan öğeler ise, bu ürünleri değerlendirmek için ne yapardı? Listede daha önce Geleceğin Tamamlanması? Scala'da bulabildiğim tüm dizi/travers işlemleri, tekil liste elemanlarında katı gibi görünüyordu. – pdxleif