将getOrElse与forall混合

时间:2018-07-19 20:17:32

标签: scala functional-programming

我已经定义了一个选项:

val names : Option[Seq[String]] = Option(Seq("Bob", "Alice", "Mike"))
names.get.forall(m => Seq("Bob").contains(m))
  

布尔值=假

但是,我想用 getOrElse 代替它以避免NPE。以下无效。

names.getOrElse.forall(m => Seq("Bob").contains(m))
  

错误:forall值不是Object的成员

4 个答案:

答案 0 :(得分:5)

您可能想先将map中的序列Option设为布尔值,然后getOrElse最终结果,以提供默认的布尔值。

names.map(_.forall(m => Seq("Bob").contains(m))).getOrElse(false)

顺便说一下,内部lambda也可以缩写:

names.map(_.forall(Seq("Bob").contains)).getOrElse(false)

答案 1 :(得分:3)

安德烈(Andrey Tyukin)的回答很好。

但是您也可以执行以下操作,这很酷,因为它使用了existsforall。它也更短:

names.exists(_.forall(Seq(...).contains))

答案 2 :(得分:0)

您可以使用折页从期权中获取价值。

scala> names.map(_.forall(e => e.contains("Bob"))).fold(false)(identity)
res10: Boolean = false

答案 3 :(得分:0)

您可以将其用作带有以下代码的Seq[Seq[String]]

names.toList.flatten.contains("Bob")