首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >混合使用getOrElse和forall

混合使用getOrElse和forall
EN

Stack Overflow用户
提问于 2018-07-20 04:17:32
回答 4查看 210关注 0票数 1

我定义了一个选项:

代码语言:javascript
复制
val names : Option[Seq[String]] = Option(Seq("Bob", "Alice", "Mike"))
names.get.forall(m => Seq("Bob").contains(m))

布尔值= false

但是,我想用一个getOrElse来代替它,以避免NPE。下面的方法不起作用。

代码语言:javascript
复制
names.getOrElse.forall(m => Seq("Bob").contains(m))

错误:a的值不是对象

的成员

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-07-20 04:22:01

您可能希望首先将Option中的序列map为布尔值,然后对最终结果执行getOrElse操作,提供一个缺省的布尔值。

代码语言:javascript
复制
names.map(_.forall(m => Seq("Bob").contains(m))).getOrElse(false)

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

代码语言:javascript
复制
names.map(_.forall(Seq("Bob").contains)).getOrElse(false)
票数 5
EN

Stack Overflow用户

发布于 2018-07-20 05:43:59

Andrey Tyukin的回答是好的。

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

代码语言:javascript
复制
names.exists(_.forall(Seq(...).contains))
票数 3
EN

Stack Overflow用户

发布于 2018-07-20 20:19:49

您可以使用fold从选项中获取价值。

代码语言:javascript
复制
scala> names.map(_.forall(e => e.contains("Bob"))).fold(false)(identity)
res10: Boolean = false
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51431076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档