【问题标题】:How to check if a None exists in a List of Future[Option]如何检查未来列表中是否存在 None [选项]
【发布时间】:2018-07-31 03:52:10
【问题描述】:

假设我们有:

val listOfYetToBeMaybePeople = List[Future[Option[Person]]]

如果所有元素都具有Some(Person)false(如果至少有一个是None),是否有一种非阻塞方式来获取Future[Boolean]true

【问题讨论】:

  • 你的意思是Future[Boolean]
  • @YuvalItzchakov 是的,对不起。我会更新的。

标签: scala functional-programming future


【解决方案1】:
Future.sequence(listOfYetToBeMaybePeople).map(!_.exists(_.isEmpty)) 

【讨论】:

  • 您可能在map 之后缺少!?如果存在None,这里给出true。如果全部都是Some,它应该给true
  • 这很有趣,因为您回答了标题中的问题(这是对问题正文中问题的补充)。我总是在问题主体中回答问题的补充问题,大多忽略问题标题。 OP 的意思是 50%-50%(标题与正文),所以缺少 ! 不是你的错;)
【解决方案2】:

试试这个:

val listOfYetToBeMaybePeople: List[Future[Option[Person]]] = 
val allExist: Future[Boolean] = 
  Future.sequence(listOfYetToBeMaybePeople).map(_.forall(_.nonEmpty))

解释:

  • sequenceListFutures 转换为列表的未来
  • forall 检查列表中所有元素的谓词
  • nonEmpty 检查 Option 是否实际上是 Some

如果所有人都存在,则以 true 返回未来。

【讨论】:

    猜你喜欢
    • 2021-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-14
    • 1970-01-01
    • 2010-10-13
    相关资源
    最近更新 更多