9.1.8、Scala__模式匹配,匹配基本数据类型,匹配字符串,匹配类型,匹配样例类对象,模式匹配在map种的应用,Option类的Some和None两种类型

scala中的模式匹配可以匹配,基本数据类型的值,枚举,string,类型,对象(样例类)

类似于Java中的switch…case语法

采用 match 关键字声明,每个分支采用 case 关键字进行声明 当需要匹配时,会从第一个 case
分支开始,如果匹配成功,那么执行对应的逻辑代码 如果匹配不成功,继续执行下一个分支进行判断 如果所有 case 都不匹配,那么会执行
case _分支

1、匹配基本数据类型的值

val i: Int = 3
i match {
    
    
  case 0 => println(s"输入的数据是:$i")
  case 1 => println(s"输入的数据是:$i")
  case _ => println("其他的值")
}

2、匹配字符串

val str: String = "abc"
str match {
    
    
  case "abc" => {
    
    
    val strUp: String = "abc".toUpperCase()
    println(s"字符串转成大写的值为:$strUp")
  }
  case "def" => println(s"字符串值为:def")
  case _ => println("其他的值")
}

3、匹配类型

val s: Any = 15.5
s match {
    
    
  case m: Int => println(s"变量$m" + "的类型为Int")
  case m: Double => println(s"变量$m" + "的类型为Double")
  case m: String => println(s"变量$m" + "的类型为String")
  case _ => println("没有匹配到变量的类型")
}

4、匹配样例类对象

val stu1: StuMatch = StuMatch("1001", "zs", 18)
stu1 match {
    
    
  case StuMatch("1001", "zs", 18) => println("他是zs")
  case StuMatch("1001", "zs", 20) => println("他不是zs")
  case _ => println("无法判断")
}

//创建样例类
case class StuMatch(id: String, name: String, age: Int)

5、模式匹配在map中的应用

Option类:两种情况Some和None

在写函数时,有时会返回一个具体的值,有时没有数据返回None 接着对空值再操作可能会出现空指针异常
所以使用get取出值后,会返回一个option对象 使用match匹配一下,防止出现空指针异常

val mapMatch: Map[String, String] = Map("k1"->"v1","k2"->"v2")
val value: Option[String] = mapMatch.get("k1")  //取出值
value match {
    
    
  case Some(v) =>println(s"k1对应的value存在,值为$v")
  case None =>println("k1对应的value值不存在")
}

//模式匹配可以有返回值
val valu: Unit = value match {
    
    
  case Some(v) => v
  case None => 0
}
println(valu)
//相当于
val value1: String = mapMatch.getOrElse("k1","不存在")
println(value1)

猜你喜欢

转载自blog.csdn.net/nerer/article/details/121278413