使用此代码:
val kv: HashMap[Int, Double] = HashMap[Int, Double]()
val temp = valuesList.list.foreach { (id: Int, value: Option[Double]) =>
val kvValue: Double = kv.getOrElse(id, 0)
val nvValue: Double = value.getOrElse(0)
val nv = kvValue + nvValue
kv.put(id, nv)
}
我收到此错误:
type mismatch;
found : (Int, Option[Double]) => Option[Double]
required: ((Int, Option[Double])) => ?
似乎无法找到解决方案......
答案 0 :(得分:1)
我猜你的功能错误了。
valuesList
可能是元组列表。也就是List[(Int, Option[Double])]
。
因此foreach
为您的匿名函数提供了元组,而不是Int
和Option
。
一个快速的解决方案是使用case
构建一个部分函数,它会轻率编译器为你解包元组。
import scala.collection.mutable.HashMap
val kv: HashMap[Int, Double] = HashMap[Int, Double]()
val valuesList = List(1-> Option(1.0))
val temp = valuesList foreach {
case (id: Int, value: Option[Double]) =>
val kvValue: Double = kv.getOrElse(id, 0)
val nvValue: Double = value.getOrElse(0)
val nv = kvValue + nvValue
kv.put(id, nv)
}
println(kv)
// gives Map(1 -> 1.0)
请确保我在此更改了valuesList
。