Scala-有条件地对列表中的元素求和

时间:2018-11-06 01:32:31

标签: scala

我正在尝试解决列表的初学者问题,但是找不到帮助我使其工作的示例。给我一个正负整数列表(AccountHistory),我需要检查此列表中的负整数是否曾经超过-1000。我希望我的代码可以与像这样的新引入的辅助函数一起工作:

def checkAccount(account: AccountHistory): Boolean = {
def helper(i: AccountHistory): Int = {
  var total = 0
  i.collect{case x if x < 0 => Math.abs(x) + total}
  return total
}
if (helper(account) >1000) true else false
}

但是它不起作用。请帮助我以错误的方式找到我的错误或问题。

编辑:预先提供的测试包括

assert(checkAccount(List(10,-5,20)))
assert(!checkAccount(List(-1000,-1)))

因此,如果assert期望为true,则我的方法无法像这样解决它。

对于列表中的任何或所有元素,“超过”是指<-1000(例如在给定时期内超出信用额度)。

2 个答案:

答案 0 :(得分:3)

i.collect{case x if x < 0 => Math.abs(x) + total}

在上述代码段中,不是分配回 total,也许您需要:

val total = i.filter(_ < 0).map(Math.abs).sum

答案 1 :(得分:2)

我认为这是您应该做的:

def checkAccount(account: AccountHistory): Boolean = 
  account.forall(_ > -1000)