Scala Option [T]是给定类型的零个或一个元素的容器, Option [T]可以是 Some [T] 或 None 对象,表示缺少值,如果找到了与给定键相对应的值,则Scala Map的get方法将生成Some(value);如果未在Map中定义给定键,则生成 None 。
假设我们有一个基于主键从数据库中检索记录的方法。
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" )) } }
将上述程序保存在 Demo.scala 中。以下命令用于编译和执行该程序。
\>scalac Demo.scala \>scala Demo
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 => "?" } }
将上述程序保存在 Demo.scala 中,以下命令用于编译和执行该程序。
\>scalac Demo.scala \>scala Demo
show(capitals.get( "Japan")) : Tokyo show(capitals.get( "India")) : ?
以下是示例程序,显示了如何使用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) ) } }
将上述程序保存在 Demo.scala 中。以下命令用于编译和执行该程序。
\>scalac Demo.scala \>scala Demo
a.getOrElse(0): 5 b.getOrElse(10): 10
以下是示例程序,显示了如何使用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 ) } }
将上述程序保存在 Demo.scala 中。以下命令用于编译和执行该程序。
\>scalac Demo.scala \>scala Demo
a.isEmpty: false b.isEmpty: true
以下是在使用"options"时可以使用的重要方法。有关可用方法的完整列表,请查看Scala的官方文档。
Sr.No | Methods with 描述 |
---|---|
1 | def get:A 返回选项的值。 |
2 | def isEmpty:Boolean 如果选项为None,则返回true,否则返回false。 |
3 | def productArity:Int 对于乘积A(x_1,...,x_k),返回k |
4 | def productElement(n:Int):Any 第n个元素,从0开始。换句话说,对于乘积A(x_1,...,x_k),返回x_(n + 1),其中0 <n <k。 |
5 | def exists(p: (A) => Boolean): Boolean 如果此选项为非空,则返回true,并且断言p应用于此选项的值时将返回true。否则,返回false。 |
6 | def filter(p: (A) => Boolean): Option[A] 如果它是非空的,则返回此选项,并将断言p应用于此选项的值将返回true。否则,返回None。 |
7 | def filterNot(p: (A) => Boolean): Option[A] 如果它是非空的,则返回此Option,并将断言p应用于此Option的值将返回false。否则,返回None。 |
8 | def flatMap[B](f: (A) => Option[B]): Option[B] 如果此Option非空,则返回将f应用于此Option的值的输出。如果此options为空,则返回None。 |
9 | def foreach[U](f: (A) => U): Unit 如果该过程的值是非空的,则将其应用于该选项的值。否则,什么都不做。 |
10 | def getOrElse[B >: A](default: => B): B 如果选项非空,则返回选项的值,否则返回判断默认值的输出。 链接:https://www.learnfk.comhttps://www.learnfk.com/scala/scala-options.html 来源:LearnFk无涯教程网 |
11 | def isDefined:Boolean 如果该选项是Some的,则返回true,否则返回false。 |
12 | def iterator:Iterator [A] 如果非空则返回Option的值,如果选项为空,则返回一个空迭代器。 |
13 | def map[B](f: (A) => B): Option[B] 如果此Option为非空,则返回包含将f应用于此Option的值的输出的Some。否则返回None。 |
14 | def orElse[B >: A](alternative: => Option[B]): Option[B] 如果它是非空的,则返回此Option,否则返回判断Alternative的输出。 |
15 | def orNull 如果选项为非空,则返回其值;如果为空,则返回null。 |
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)