在Scala中,Option[T]是给定类型的0或1个元素的容器。Option 是一个数据类型,用来表明一些数据的“有”或“无”,可以是Some[T]或None[T],其中T可以是任何给定类型。一个Some 实例可以存储任何类型的数据。None 对象表示数据的缺失。
例如,如果key存在,Scala Map总是返回值Some[],如果键不存在,则返回None。
val booksMap = Map(101 -> "Scala", 102 -> "Scala")
println(booksMap.get(101))
println(booksMap.get(105))
输出结果如下图所示:
getOrElse()方法用于从一个Option获取值,如果该值不存在,则返回默认值。例如:
println(booksMap.get(101).getOrElse("此图书不存在"))
println(booksMap.get(105).getOrElse("此图书不存在"))
输出结果如下图所示:
【示例】使用Option类型。
object demo {
def main(args: Array[String]): Unit = {
val a: Option[String] = Some("aaaa")
println(a.get)
val b: Option[String] = None
// println(b.get)
println(b.getOrElse(""))
val c: Option[String] = Some(null)
println(c.get)
// Option类型的模式匹配
val title:Option[String] = Some("老板")
// val title:Option[String] = None
title match{
case Some(a) => println(s"title是$a。") // 提取
case None => println(s"没有title,屌丝一个。")
}
// 巧用map/foreach函数
title.foreach(t => println(s"我的title是 = $t"))
}
}
Option 数据类型与函数或方法一起使用,这个函数或方法可选地返回一个值。它可以返回Some(x) –这里x是实际返回的值,或者None 对象–该对象代表一个缺失的值。由一个函数返回的可选值可以使用模式匹配读取。
下面的代码演示了使用方法:
def colorCode(color:String): Option[Int] = {
color match{
case "red" => Some(1)
case "blue" => Some(2)
case "green" => Some(3)
case _ => None
}
};
val code = colorCode("orange");
code match{
case Some(c) => println("code for orange is:" + c);
case None => println("code not defined for orange");
}
Option 数据类型用来防止null 指针异常。在许多语言中,null 被用来表示数据缺失。在Scala 中联合使用强类型检查和Option 类型以防止null 引用错误。
Option类型用来表示可能存在也可能不存在的值。case class类Some包装了某个值,而样例对象None表示没有值。Option支持泛型。(Option的语法必须掌握,因为Spark源码中有大量的实例是关于Option语法的)
下面是一个使用了Option类型的代码:
def caseOps8: Unit = {
def optionOps: Unit = {
val capitals = Map("France" -> "Paris", "Japan" -> "Tokyo", "BeiJing" -> "通州")
println(capitals.get("Japan") + "," + show(capitals.get("Japan")))
println(capitals.get("BeiJing") + "," + show(capitals.get("India")))
}
def show(x: Option[String]) = x match {
case Some(s) => s
case None => "?"
}
optionOps
}
caseOps8
执行上面的代码,输出结果为:
Some(Tokyo),Tokyo
Some(通州),?
Option类型提供有一个getOrElse方法。当没有值时,使用getOrElse()来访问值或使用默认值,可以得到友好的反馈。另外还提供了一个isEmpty()方法,用来判断Option中是否有值:
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) )
// 使用isEmpty()方法:
println("a.isEmpty: " + a.isEmpty )
println("b.isEmpty: " + b.isEmpty )
© 版权声明
本站网络名称:
知趣
本站永久网址:
https://www.qubaa.top
网站侵权说明:
本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长删除处理。
1 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
2 本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
3 本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。
1 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
2 本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
3 本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。
THE END
暂无评论内容