我已经定义了一个选项:
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的成员
答案 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)的回答很好。
但是您也可以执行以下操作,这很酷,因为它使用了exists
和forall
。它也更短:
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")