我有一个results: List[Future[Option[T]]]
它包含(并行)的计算。展平未来的期权部分[期权[期权[T]]]
我想尽快获得第一个非None
结果,或者如果所有计算结果都返回None
,则返回None
。
目前,我正在做这个(我认为是丑陋的)来处理Future.find
没有找到任何结果的情况。
Future.find(results)(r => r.isDefined) map {
case Some(hit) => hit
case _ => None
}
这将给我一个Future[Option[T]]
(我想要的)。
有没有一种更简洁的方式来获得Future[Option[T]]
:即不必手动变平Future[Option[Option[T]]]
?
你能结构:
在这方面,你可以修改你的问题期货中的计算,这样你可以使用'Future.firstCompletedOf'来获得你所需要的? –
@RandallSchulz不是我所知道的......计算可能会返回None,我不知道哪些人会这样做(事实上,如果我事先知道这一点,我绝不会开始计算)。 – fommil