【发布时间】:2012-04-17 23:20:00
【问题描述】:
我有一个列表
val l : List[Map[String,Any]] = List(Map("a" -> 1, "b" -> 2.8), Map("a" -> 3, "c" -> 4), Map("c" -> 5, "d" -> "abc"))
我使用下面的代码来找到键“a”(Int)、“b”(Double)和“c”(Int)的总和。 “d”作为噪声包括在内。
l.map(n => n.mapValues( v => if (v.isInstanceOf[Number]) {v match {
case x:Int => x.asInstanceOf[Int]
case x:Double => x.asInstanceOf[Double]
}} else 0)).foldLeft((0,0.0,0))((t, m) => (
t._1 + m.get("a").getOrElse(0),
t._2 + m.get("b").getOrElse(0.0),
t._3 + m.get("c").getOrElse(0)))
我希望输出是 (4, 2.8, 9) 但我却被
<console>:10: error: overloaded method value + with alternatives:
(x: Int)Int <and>
(x: Char)Int <and>
(x: Short)Int <and>
(x: Byte)Int
cannot be applied to (AnyVal)
我认为异常试图告诉我“+”不适用于 AnyVal。我如何让它发挥作用以获得我想要的结果?谢谢
【问题讨论】: