简洁的方法来过滤和映射包含选项的元组的scala序列

Rap*_*oth 4 scala

转换Seq of Tuples的最短方法是什么,例如:

val xs : Seq[(Long,Option[Double])]  = Seq((1L,None),(2L,Some(2.0)),(3L,None))
Run Code Online (Sandbox Code Playgroud)

Seq[(Long,Double)]通过除去诺内斯

我用过这两个

xs.filter(_._2.isDefined).map{case (i,x) => (i,x.get)}
Run Code Online (Sandbox Code Playgroud)

xs.flatMap{
  case (i,Some(x)) => Some(i,x)
  case _ => None
}
Run Code Online (Sandbox Code Playgroud)

但是想知道是否有更短的路.对于Seq[Option[Double]]我会做flatten...但这对嵌套选项不起作用.

Xav*_*hot 9

您可以使用collect哪个丢弃不属于您案例的内容:

 xs.collect{ case (i, Some(x)) => (i, x) }
Run Code Online (Sandbox Code Playgroud)

在这种情况下,由于case (i, None)未使用,这些情况将被过滤掉.