有条件地为列表添加选项

时间:2015-06-04 23:55:32

标签: scala

如果我想将Option(如果有的话)的值添加到List中,是否有更好的方法:

val x = Some(42)
val xs = List(1,2,3)
val xs2 = x match {
  case None => xs
  case Some(x2) => x :: xs
}

我知道我可以像++一样使用Iterable运算符:

val xs2 = (x ++ xs).toList     

但显式转换回List会导致整个列表被扫描和复制吗?

2 个答案:

答案 0 :(得分:1)

您可以使用++:返回List而不是Iterable(跳过.toList来电):

scala> val x = Some(42)
x: Some[Int] = Some(42)

scala> val xs = List(1,2,3)
xs: List[Int] = List(1, 2, 3)

scala> x ++: xs
res4: List[Int] = List(42, 1, 2, 3)

scala> val x = None
x: None.type = None

scala> x ++: xs
res5: List[Int] = List(1, 2, 3)

答案 1 :(得分:0)

这个怎么样:

val x: Option[Int] = Some(42)
val xs = List(1,2,3)
val xs2 = xs ++ (x match {
  case Some(value) => List(value)
  case None => List()
})

请注意,我必须告诉Scala xOption[Int],因此它不会认为它是Some[Int]并抱怨匹配。