Scala 选项(Option)

Scala 选项(Option)

选项

Scala Option [T]是给定类型的零个或一个元素的容器。Option [T]可以是Some [T]None对象,表示缺少值。例如,Scala Map的get方法如果找到了与给定键相对应的值,则生成Some(value);如果Map中未定义给定键,则生成None。选项类型在Scala程序中经常使用,您可以将其与Java中可用的空值(表示无值)进行比较。例如,java.util.HashMap的get方法返回存储在HashMap中的值,如果未找到任何值,则返回null。假设我们有一个基于主键从数据库中检索记录的方法。

def findPerson(key: Int): Option[Person]

如果找到记录,该方法将返回Some [Person],如果找不到记录,则返回None。让我们遵循以下程序。

object Demo {
   def main(args: Array[String]) = {
      val capitals = Map("France" -> "Paris", "Japan" -> "Tokyo")

      println("capitals.get( \"France\" ) : " +  capitals.get( "France" ))
      println("capitals.get( \"India\" ) : " +  capitals.get( "India" ))
   }
}

输出-

capitals.get( "France" ) : Some(Paris)
capitals.get( "India" ) : None

将可选值分开的最常见方法是通过模式匹配。例如,尝试以下程序。

object Demo {
   def main(args: Array[String]) = {
      val capitals = Map("France" -> "Paris", "Japan" -> "Tokyo")

      println("show(capitals.get( \"Japan\")) : " + show(capitals.get( "Japan")) )
      println("show(capitals.get( \"India\")) : " + show(capitals.get( "India")) )
   }

   def show(x: Option[String]) = x match {
      case Some(s) => s
      case None => "?"
   }
}

输出:

show(capitals.get( "Japan")) : Tokyo
show(capitals.get( "India")) : ?

使用 getOrElse() 方法

以下是示例程序,显示了如何使用getOrElse()方法访问值或不存在值时的默认值。

object Demo {
   def main(args: Array[String]) = {
      val a:Option[Int] = Some(5)
      val b:Option[Int] = None 

      println("a.getOrElse(0): " + a.getOrElse(0) )
      println("b.getOrElse(10): " + b.getOrElse(10) )
   }
}

输出:

a.getOrElse(0): 5
b.getOrElse(10): 10

使用 isEmpty() 方法

以下是示例程序,显示了如何使用 isEmpty() 方法检查选项是否为None。

object Demo {
   def main(args: Array[String]) = {
      val a:Option[Int] = Some(5)
      val b:Option[Int] = None 

      println("a.isEmpty: " + a.isEmpty )
      println("b.isEmpty: " + b.isEmpty )
   }
}

输出:

a.isEmpty: false
b.isEmpty: true

Scala 选项方法

以下是在使用Option时可以使用的重要方法。有关可用方法的完整列表,请查看Scala的参考手册。

方法 描述
def get: A 返回选项的值。
def isEmpty: Boolean 如果选项为None,返回true,否则返回false。
def productArity: Int 这个产品的尺寸。对于产品a (x_1,…, xk),返回k
def productElement(n: Int): Any 乘积的第n个元素,以0为基。换句话说,对于乘积a (x_1,…, x_k)返回x_(n+1),其中0 < n < k。
def exists(p: (A) => Boolean): Boolean 如果该选项为非空,则返回true;如果谓词p应用于该选项的值,则返回true。否则,返回false。
def filter(p: (A) => Boolean): Option[A] 如果非空,则返回该选项,并将谓词p应用于该选项的值将返回true。否则,返回None。
def filterNot(p: (A) => Boolean): Option[A] 如果非空,则返回该选项,并将谓词p应用于该选项的值将返回false。否则,返回None。
def flatMap[B](f: (A) => Option[B]): Option[B] 如果该选项非空,则返回对该选项的值应用f的结果。如果此选项为空,则返回None。
def foreach[U](f: (A) => U): Unit 如果选项的值是非空的,则应用给定的过程f。否则,什么都不做。
def getOrElse[B >: A](默认: => B): B 返回选择的值如果非空的选项,否则返回的结果评估默认
def isDefined: Boolean 如果选项是某个实例,则返回true,否则返回false。
def iterator: Iterator[A] 如果非空,返回一个单例迭代器,返回选项的值;如果选项为空,返回一个空迭代器。
def map[B](f: (A) => B): Option[B] 如果该选项非空,则返回包含应用f到该选项值的结果的Some。否则返回None。
def orElse[B >: A](alternative: => Option[B]): Option[B] 如果非空则返回此选项,否则返回alternative的计算结果。
def orNull 如果非空,则返回选项的值;如果为空,则返回null。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程