Scala选项[Seq[A]]存在



我有以下代码:

case class Person(name: String, age: Int)
object Launcher extends App {
val people = Option(Seq(Person("Andrii", 20), Person("John", 35), Person("Sam", 15)))
def filterPeople(list: Option[Seq[Person]]): Boolean =
list.getOrElse(Nil)
.exists(_.age < 18)
assert(filterPeople(people) == true)
}

问题是:没有getOrElse(Nil),我能更优雅、更安全地处理Option[Seq[A]]吗?

list.getOrElse(Nil)
.exists(_.age < 18)

我找到了另一种方法:

list.exists(_.exists(_.age > 18))

注意:我有Option[Seq[A]]只是因为REST合同。

@NimrodArgov指出,我更喜欢使用模式匹配来检查列表类型,因为它更可读:

def filterPeople(list: Option[Seq[Person]]): Boolean = {
list match {
case Some(people) => people.exists(_.age < 18)
case None => false
}
}

另一种可能性。

def filterPeople(list: Option[Seq[Person]]): Boolean =
list.fold(false)(_.exists(_.age < 18))

测试:

filterPeople(people)  // res0: Boolean = true
filterPeople(None)    // res1: Boolean = false

相关内容

最新更新