类型不匹配;发现:列表需要[Double.type]:列表[双]

时间:2016-07-24 14:15:24

标签: scala

我试图计算scala中的平均值,这是我的函数平均值:

    var p3 = List(Double)
    for (dimension <- result.dimensions) {
      p3 :+ dimension.average
    }
    println(average(p3))

这是我的代码:

{
"result" : {
"dimensions" : [{
"average" : 2.2
},
{
"average" : 4.2
}]
} 
}

我的结构:

create_posttype()

2 个答案:

答案 0 :(得分:1)

List(Double)是一个包含一个元素的列表,它是Double的所谓伴随对象。如果您想要一个Double的空列表,则需要List[Double]()(或更清晰,List.empty[Double])。然后,下一个错误是在p3 :+ dimension.average中您创建了一个新的List,然后对其执行任何操作。您可以使用p3 = p3 :+ dimension.average来修复它,但这将是一种可怕的风格。

答案 1 :(得分:1)

List的初始化是错误的。请尝试以下方法:

var p3 = List[Double]()

除此之外,你可以用更容易,更惯用的方式实现同​​样的目标。一种方法是使用yield

val p3 = for (dimension <- result.dimensions) yield dimension.average

这与基本相同

val p3 = result.dimensions.map(_.average)

除此之外,您的平均功能有点复杂,只需执行val avg = list.sum/list.length即可计算列表的平均值。