6、Scala容器Option

本文介绍Scala中的Option容器。

1、基本知识

Scala中Option是一个容器,长度为1,保存的是空的或者给定类型的数值。

也就是说Option是Scala用来解决空值None、null、0这种表示“什么都没有”的特殊场景的方法。

Option也被看成Scala提供的一种函数方法,Option或Option[T],T是Type数据类型。

2、Option的定义/声明方法

2.1 声明一个非空的Option类型

// in scala
val msg0 : Option[String] = Some("Option is a Scala collection")
println(msg0)

2.2 声明一个空的Option类型

// in Scala
val msg1 : Option[String] = None
println(msg1)

3、判断Option类型的数据是不是空的

Option.isEmpty方法用来判断Option类型的数据值是不是空的

// in scala
object Test {

  def main(args: Array[String]) {
    val x: Option[Int] = Some(5)
    val y: Option[Int] = None

    println("Check X is Empty: " + x.isEmpty)
    println("Check Y is Empty: " + y.isEmpty)
  }
}

4、使用Option来解决空值问题的场景

4.1 和 getOrElse() 一起使用,利用Option设置默认值,即解决查找返回结果为None的问题

//in scala

object Test {

  def main(args: Array[String]) {
    val stud = Student(14, "Chris", 45f, None)
    println(stud.gender.getOrElse("Gender not specified"))  //和getOrElse一起使用置查询结果是None的默认值
    println(stud.Name) //Name是普通String类型,没有getOrElse的方法可调用
  }
}

case class Student(
                    id: Int,
                    Name: String,
                    marks: Float,
                    gender: Option[String]) //定义Option类型

4.2 和get()一起使用,解决如Map中查询key不存在的问题,返回None

//in scala

object Test {
    def main(args: Array[String]) {
      val students = Map(1 -> Student(10, "John", 62.5f, Some("male")),
        2 -> Student(12, "Adam", 70.5f, Some("female")))
      def findById(id: Int): Option[Student] = students.get(id)

      val st1 = findById(2)
      println(st1)
      if (st1.isDefined) {
        println(st1.get.id)
        println(st1.get.Name)
        println(st1.get.marks)
      }

      val st2 = findById(3)
      println(st2)

    }
}

case class Student(
                    id: Int,
                    Name: String,
                    marks: Float,
                    gender: Option[String])

4.3 和模式匹配的方法一起使用来解决查询为None的问题

//in scala
object Test {

  def main(args: Array[String]) {
    val student = Map(12 -> "Anderson", 14 -> "Reena")
    println("Student Name with id 12  : " + displaykey(student.get(12)))
    println("Student Name with id 16 : " + displaykey(student.get(16)))
  }

  def displaykey(aName: Option[String]) = aName match {
    case Some(t) => t
    case None    => "?"
  }
}

5、Option的其他用法

.isDefined 方法判断Option是一个Some实例

.orNull 方法 ,如果值是空的返回null,否则返回其值

Option.get 方法,获取其值

//in scala
object Test {

  def main(args: Array[String]) {
    val x: Option[Int] = Some(5)
    val y: Option[Int] = None

    println(x.isDefined)
    println(y.isDefined) //如果Option是一个Some实例则返回true,否则返回false
    println(x.orNull) //如果值是空的返回null,否则返回其值
    println(y.orNull) //如果值是空的返回null,否则返回其值
    println(x.get) //x是Option类型,有get方法可以获取值。y是None类型,没有get方法获取值。
  }
}

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值