如果我想将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
会导致整个列表被扫描和复制吗?
答案 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 x
是Option[Int]
,因此它不会认为它是Some[Int]
并抱怨匹配。