模式匹配是Scala中非常有特色,非常强大的一种功能。模式匹配,其实*类似于Java中的swich case语法,即对一个值进行条件判断,然后针对不同的条件,进行不同的处理。
但是Scala的模式匹配的功能比Java的swich case语法的功能要强大地多,Java的swich case语法只能对值进行匹配。但是Scala的模式匹配除了可以对值进行匹配之外,还可以对类型进行匹配、对Array和List的元素情况进行匹配、对case class进行匹配、甚至对有值或没值(Option)进行匹配。
而且对于Spark来说,Scala的模式匹配功能也是极其重要的,在spark源码中大量地使用了模式匹配功能。因此为了更好地编写Scala程序,并且更加通畅地看懂Spark的源码,学好模式匹配都是非常重要的。
1、模式匹配的基础语法
//scala没有java中的switch case语法,但是有更强大的match case语法,即类型匹配,类替代
//match case的语法如下:变量 match { case 值 => 代码 }。_代表不满足以上所有情况的默认。当有一个case分支满足了,就不会继续向下匹配了
//match case语法最基本的应用,就是对变量的值进行模式匹配
//案例:成绩评价
object demo1{
def main(args: Array[String]):Unit={
def studentScore(score:String):Unit={
score match{
case "a"=>println("优秀")
case "b"=>println("良好")
case "c"=>println("一般")
case _=>println("继续努力")
//_代表其他
}
}
studentScore("a") //优秀
}
}
在模式匹配中使用if守卫
//scala模式匹配可以在case的条件判断后加上一个if,进行双重过滤
object demo1{
def main(args: Array[String]):Unit={
def studentScore(name:String,score:String):Unit={
score match{
case "a"=>println("优秀")
case "b"=>println("良好")
case "c"=>println("一般")
case _ if name=="xiong"=>println(name+"是个好孩子,加油")
case _=>println("继续努力")
}
}
studentScore("xiong","d") //xiong是个好孩子,加油
}
}
在模式匹配中进行变量赋值