fork download
  1. import scala.concurrent.duration._
  2. import scala.concurrent.{Future, Await}
  3. import scala.concurrent.ExecutionContext.Implicits.global
  4.  
  5. object Main extends App {
  6. val data = Seq(Some(1), None, Some(2), None, Some(5))
  7. var count = 6
  8.  
  9. def getData: Future[Int] = Future( {
  10. Thread sleep (1000)
  11. count += 1
  12. count
  13. })
  14.  
  15.  
  16. def resolve[T](input: Seq[Option[T]], supplier: => Future[T]): Seq[Future[T]] = {
  17. input.map(option => option.map(Future.successful).getOrElse(supplier))
  18. }
  19.  
  20. resolve(data, getData).map(Await.result(_, 10.second)).foreach( println )
  21.  
  22. }
Success #stdin #stdout 0.51s 323456KB
stdin
Standard input is empty
stdout
1
8
2
7
5