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)