import scala.
concurrent.
duration.
_ import scala.
concurrent.
{Future, Await
} import scala.
concurrent.
ExecutionContext.
Implicits.
global
val data
= Seq
(Some
(1), None, Some
(2), None, Some
(5))
def getData
: Future
[Int
] = Future
( { Thread sleep (1000)
count += 1
count
})
def resolve
[T
](input
: Seq
[Option
[T
]], supplier
: => Future
[T
]): Seq
[Future
[T
]] = { input.map(option => option.map(Future.successful).getOrElse(supplier))
}
resolve(data, getData).map(Await.result(_, 10.second)).foreach( println )
}
aW1wb3J0IHNjYWxhLmNvbmN1cnJlbnQuZHVyYXRpb24uXwppbXBvcnQgc2NhbGEuY29uY3VycmVudC57RnV0dXJlLCBBd2FpdH0KaW1wb3J0IHNjYWxhLmNvbmN1cnJlbnQuRXhlY3V0aW9uQ29udGV4dC5JbXBsaWNpdHMuZ2xvYmFsCgpvYmplY3QgTWFpbiBleHRlbmRzIEFwcCB7Cgl2YWwgZGF0YSA9IFNlcShTb21lKDEpLCBOb25lLCBTb21lKDIpLCBOb25lLCBTb21lKDUpKQoJdmFyIGNvdW50ID0gNgoKCWRlZiBnZXREYXRhOiBGdXR1cmVbSW50XSA9IEZ1dHVyZSggewoJCVRocmVhZCBzbGVlcCAoMTAwMCkKCQljb3VudCArPSAxCiAgICAgICAgY291bnQKICAgIH0pCgkKCiAgICBkZWYgcmVzb2x2ZVtUXShpbnB1dDogU2VxW09wdGlvbltUXV0sIHN1cHBsaWVyOiA9PiBGdXR1cmVbVF0pOiBTZXFbRnV0dXJlW1RdXSA9IHsKICAJCWlucHV0Lm1hcChvcHRpb24gPT4gb3B0aW9uLm1hcChGdXR1cmUuc3VjY2Vzc2Z1bCkuZ2V0T3JFbHNlKHN1cHBsaWVyKSkKICAgIH0KCiAgICByZXNvbHZlKGRhdGEsIGdldERhdGEpLm1hcChBd2FpdC5yZXN1bHQoXywgMTAuc2Vjb25kKSkuZm9yZWFjaCggcHJpbnRsbiApCgp9