找不到参数num的隐式值:Numeric [Option [Double]]

时间:2018-10-18 09:11:32

标签: scala

我是Scala的新手,正试图与Option保持联系。我在尝试着 根据其字符串键将以下列表中的双精度值成员求和:

BusinessHour

总结为:

val chmembers = List(("Db",0.1574), ("C",1.003), ("Db",15.4756), ("D",0.003), ("Bb",1.4278), ("D",13.0001))

我当前的代码是

List((D,13.0031), (Db,15.633000000000001), (C,1.003), (Bb,1.4278))

但是这不会编译并返回:

  

'找不到参数num的隐式值:   Numeric [Option [Double]]”。   我不了解“数字”的来源或处理方式。

如果有任何建议,我将不胜感激。预先感谢。

2 个答案:

答案 0 :(得分:0)

您可以这样做:

val chmembers = List(("Db",0.1574), ("C",1.003), ("Db",15.4756), ("D",0.003), ("Bb",1.4278), ("D",13.0001))
chmembers.groupBy(_._1).mapValues(_.map(_._2).sum)

输出

//Map(D -> 13.0031, Db -> 15.633000000000001, C -> 1.003, Bb -> 1.4278)

答案 1 :(得分:0)

Numeric用于执行sum。这是一个类型类,可为IntFloatDouble等实现一些常见的数字运算。

我不确定您为什么要使用Option,但我认为这不会帮助您解决问题。您的代码可以简化为:

val chmembers = List(("Db",0.1574), ("C",1.003), ("Db",15.4756), ("D",0.003), ("Bb",1.4278), ("D",13.0001))

def getClassWeights: List[(String, Double)] = {
  chmembers.groupBy(_._1).mapValues(_.map(_._2).sum).toList
}