如何在List上实现此过滤

时间:2018-06-10 23:36:50

标签: scala

我有以下对象列表: -

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)方法感觉相当笨拙。

1 个答案:

答案 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(或模式匹配)可能更详细,但阅读起来可能更直观。