首页 > 解决方案 > 有什么更好的方法来制作一个对任何数字原语的列表求和的通用方法?

问题描述

考虑到我会收到一个 List[List[AnyVal]],我想返回一个 List,它的每个元素都是该位置的内部列表的总和。

我已经编写了下面的代码,但我几乎可以肯定有更好的解决方案,我应该如何处理这个问题?

    def sumGenList(value: List[List[AnyVal]]) = {
        value.map(x =>
            x.head match {
                case d if d.isInstanceOf[Double] => x.map(y => y.toString.toDouble).sum
                case f if f.isInstanceOf[Float] => x.map(y => y.toString.toFloat).sum
                case l if l.isInstanceOf[Long] => x.map(y => y.toString.toLong).sum
                case i if i.isInstanceOf[Int] => x.map(y => y.toString.toInt).sum

                case _ => println("Error: NaN List")
            }
        )
    }

标签: scalagenerics

解决方案


你想使用Numeric-typeclass 。

def sumGenList[T : Numeric](value: List[List[T]]): List[T] =
  value.map(_.sum)

推荐阅读