我定义了一个选项:
val names : Option[Seq[String]] = Option(Seq("Bob", "Alice", "Mike"))
names.get.forall(m => Seq("Bob").contains(m))
布尔值= false
但是,我想用一个getOrElse来代替它,以避免NPE。下面的方法不起作用。
names.getOrElse.forall(m => Seq("Bob").contains(m))
错误:a的值不是对象
的成员
发布于 2018-07-20 04:22:01
您可能希望首先将Option
中的序列map
为布尔值,然后对最终结果执行getOrElse
操作,提供一个缺省的布尔值。
names.map(_.forall(m => Seq("Bob").contains(m))).getOrElse(false)
顺便说一下,内部lambda也可以缩写:
names.map(_.forall(Seq("Bob").contains)).getOrElse(false)
发布于 2018-07-20 05:43:59
Andrey Tyukin的回答是好的。
但您也可以执行以下操作,这很酷,因为它使用了exists
和forall
。它也更短:
names.exists(_.forall(Seq(...).contains))
发布于 2018-07-20 20:19:49
您可以使用fold从选项中获取价值。
scala> names.map(_.forall(e => e.contains("Bob"))).fold(false)(identity)
res10: Boolean = false
https://stackoverflow.com/questions/51431076
复制相似问题