加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

对于orElse而不是flatMap的Scala for-comprehension

发布时间:2020-12-16 18:20:38 所属栏目:安全 来源:网络整理
导读:我对于选项的理解和flatMap非常熟悉. 所以我知道你可以做点什么 val a: Option[_] = for { foo - Some(x) bar - Some(y) baz - Some(z)} yield baz 这给了我一些(z)如果for comprehension中没有任何东西是None,因为它在每个语句上做了一个flatMap. 但实际上
我对于选项的理解和flatMap非常熟悉.

所以我知道你可以做点什么

val a: Option[_] = for {
  foo <- Some(x)
  bar <- Some(y)
  baz <- Some(z)
} yield baz

这给了我一些(z)如果for comprehension中没有任何东西是None,因为它在每个语句上做了一个flatMap.

但实际上我正在寻找其他方面的东西.我想遍历理解,只要一切都是无,就像一个理解中的orElse.

例如:

val b: Option[_] = for {
    foo <- None
    bar <- Some(x)
    baz <- None
} yield *return the one with some*

有这样的东西,或者最好的方法是什么?

提前致谢!

解决方法

当它找到Some时,reduce不会短路(即,即使第一个元素是Some,千元素列表也会进行一千次比较). find(_.isDefined)flatten将停止并返回它找到的第一个.以下仅进行2次比较(而不是5次).

val xs: List[Option[Int]] = List(None,Some(1),None,Some(2),Some(3))
xs.find(_.isDefined).flatten

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读