2017-07-02 53 views
0

我想盡量減少對象列表,但斯卡拉和我的大腦只是不會收斂(或我正在想一個完全錯誤的方式,哈哈)。我的問題很簡單,但我無法找到解決方案。減少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(帳戶)和我對象事務:

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

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

我回到0.0只是這樣的代碼編譯,但爲什麼是期待階我的班級models.Transaction?

謝謝!

+0

減少了輸入一個累加器和當前值。我想你想把'(transactionA,transactionB)=> transactionA.amount + transactionB.amount'改成'(acc,transactionA)=> acc + transactionA.amount'。很難說沒有更多的代碼。 – erip

+0

@erip不起作用,它顯示此錯誤:重載的方法值[+]不能應用於(models.Transaction) –

回答

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 
+0

哦,我的上帝,我是如此愚蠢,我認爲你可以減少列表到任何你想要的,就像JavaScript一樣。我想我明白了!謝謝 –