对于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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |