减少Scala中的对象列表无法正常工作

时间:2017-07-02 01:02:39

标签: scala

我正在尝试减少一个对象列表,但Scala和我的大脑并没有收敛(或者我正在以一种完全错误的方式思考,哈哈)。我的问题很简单,但无论如何我无法找到解决方案。

错误如下所示:

type mismatch;
 found   : Double
 required: models.Transaction


def accountBalance(account: String): Double = {
    val accountTransactionList = Transaction.accountBalance(account)
    accountTransactionList.reduce {
        (transactionA, transactionB) => transactionA.amount + transactionB.amount 
    }
    0.0
}

Transaction.accountBalance(account)和我的对象事务:

object Transaction {
    var accountTransactions = Map[String, List[Transaction]]()

    def accountBalance(account: String): List[Transaction] = accountTransactions.getOrElse(account, List[Transaction]())
}

我正在返回0.0只是因为代码编译,但为什么scala期望我的类模型。事务?

谢谢!

1 个答案:

答案 0 :(得分:1)

考虑reduce()的定义。

def reduce[A1 >: A](op: (A1, A1) ⇒ A1): A1

请注意,所有类型都必须匹配。该集合包含A1类型的元素,最终结果为类型A1。您尝试减少accountTransactionList似乎不符合此要求。

在这方面,

reduceLeft()reduceRight()稍微灵活一些,但AB类型仍然必须相关。

def reduceLeft[B >: A](op: (B, A) ⇒ B): B