我有以下对象列表: -
case class Account(id: Long, locked: Boolean)
val a1 = Account(1, false)
val a2 = Account(2, false)
val a3 = Account(3, true)
val a4 = Account(4, true)
val accounts = List(a1, a2, a3, a4)
这是一种正常工作的方法。
def getAccounts(includeLocked: Boolean): List[Account] = {
if(includeLocked) {
accounts.filter(acc => acc.locked == false)
} else {
accounts
}
}
调用getAccounts(false)
正确过滤掉锁定的帐户,getAccounts(false)
会返回我想要的所有内容。
getAccounts(false)
List(Account(1,false), Account(2,false))
getAccounts(true)
List(Account(1,false), Account(2,false), Account(3,true), Account(4,true))
但有没有更惯用的方式来实施getAccounts
?
我目前的if(includeLocked)
方法感觉相当笨拙。
答案 0 :(得分:1)
正如其他人评论的那样,示例代码中的if(includeLocked)
似乎应为if(!includeLocked)
。
更简洁的版本可能如下所示:
def getAccounts(includeLocked: Boolean): List[Account] =
accounts.filter(acc => includeLocked || !acc.locked)
getAccounts(true)
// res1: List[Account] = List(Account(1,false), Account(2,false), Account(3,true), Account(4,true))
getAccounts(false)
// res2: List[Account] = List(Account(1,false), Account(2,false))
请注意,if/else
(或模式匹配)可能更详细,但阅读起来可能更直观。