Scala 选项 [Seq[A]] 存在
Scala Option[Seq[A]] exists
我有以下代码:
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 合同。
另一种可能性。
def filterPeople(list: Option[Seq[Person]]): Boolean =
list.fold(false)(_.exists(_.age < 18))
已测试:
filterPeople(people) // res0: Boolean = true
filterPeople(None) // res1: Boolean = false
@NimrodArgov 指出,我更愿意使用模式匹配来检查列表类型,因为它更具可读性:
def filterPeople(list: Option[Seq[Person]]): Boolean = {
list match {
case Some(people) => people.exists(_.age < 18)
case None => false
}
}
我有以下代码:
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 合同。
另一种可能性。
def filterPeople(list: Option[Seq[Person]]): Boolean =
list.fold(false)(_.exists(_.age < 18))
已测试:
filterPeople(people) // res0: Boolean = true
filterPeople(None) // res1: Boolean = false
@NimrodArgov 指出,我更愿意使用模式匹配来检查列表类型,因为它更具可读性:
def filterPeople(list: Option[Seq[Person]]): Boolean = {
list match {
case Some(people) => people.exists(_.age < 18)
case None => false
}
}