Scala选项[Seq [A]]存在

时间:2017-08-30 06:30:36

标签: scala scala-collections scala-option

我有以下代码:

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)
}

问题是:我可以在没有Option[Seq[A]]的情况下更优雅,更安全地处理getOrElse(Nil)吗?

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

我找到了另一种方法:

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

注意:由于REST合同,我有Option[Seq[A]]

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

另一种可能性。

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

测试:

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