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

scala – 将Seq [Option [T]]转换为Seq [T]

发布时间:2020-12-16 08:49:31 所属栏目:安全 来源:网络整理
导读:我有一个Option [T]的集合,现在我想从中提取值.但我也希望新系列能够排除Nones. val foo = List(None,None,Some(1),Some(2)) 我想到的第一个想法是地图,但它有点不直观. foo.map(o = o.get) // Exception!foo.map(o = o.getOrElse(null)).filterNot(_ == nul
我有一个Option [T]的集合,现在我想从中提取值.但我也希望新系列能够排除Nones.

val foo = List(None,None,Some(1),Some(2))

我想到的第一个想法是地图,但它有点不直观.

foo.map(o => o.get) // Exception!
foo.map(o => o.getOrElse(null)).filterNot(_ == null) // List(1,2),works but not elegant

有没有更简单的方法来实现这种行为?

解决方法

使用展平方法:

scala> val foo = List(None,Some(2))
foo: List[Option[Int]] = List(None,Some(2))

scala> foo.flatten
res0: List[Int] = List(1,2)

为了完整,还有flatMap方法:

foo.flatMap(x => x)

为了理解:

scala> for(optX <- foo; x <- optX) yield x
res1: List[Int] = List(1,2)

并收集(像过滤器地图一样):

scala> foo.collect { case Some(x) => x } 
res2: List[Int] = List(1,2)

(编辑:李大同)

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

    推荐文章
      热点阅读