我不确定您要达到的目标是什么,但这似乎不是正确的方法。如果您需要确定“列表”中是否存在某个值,那么 aSet
可能会更好地满足您的需求:
scala> val s = Set(4,8)
s: scala.collection.immutable.Set[Int] = Set(4, 8)
scala> s(4)
res0: Boolean = true
scala> s(5)
res1: Boolean = false
scala> s map (_ * 2)
res2: scala.collection.immutable.Set[Int] = Set(8, 16)
scala> s reduceLeft((a,b) => a+b)
res3: Int = 12
甚至更简单:
scala> s sum
res4: Int = 12
如果您需要更复杂的东西,并且列表中元素的索引很重要,您可以使用Map
键模拟索引的位置,并且可以将缺失值映射到某个默认值:
scala> val m = Map(1 -> 4, 2 -> 8) withDefault(n => 0)
m: scala.collection.immutable.Map[Int,Int] = Map(1 -> 4, 2 -> 8)
scala> m(1)
res5: Int = 4
scala> m(3)
res6: Int = 0
scala> m map {case (k,v) => (k,2*v)}
res7: scala.collection.immutable.Map[Int,Int] = Map(1 -> 8, 2 -> 16)
scala> m.foldLeft(0){case (sum,(_,v)) => sum+v}
res8: Int = 12
再次,不确定您的需求是什么,但感觉就像您走错了路……
Option
是一种我在使用前会三思而后行的类型。问问自己是否真的有必要。可能有一些解决方案可以以更优雅的方式实现您想要做的事情。