模式匹配,类似于java中的switch case 语法,即对一个值进行条件判断,然后针对某种条件,针对不同的处理
但是scala的模式匹配的功能比java的switch case语法的功能要强大很多,java的switch case语法只能对值进行匹配,但是scala的模式匹配除了可以对值进行匹配之外,还可以对类型进行匹配,对Array和List的元素情况进行匹配,对case class(样例类) 进行匹配,甚至对有值或没值(Option)进行匹配。
而且对于spark来说,scala的模式匹配功能也是极其重要的,在spark源码中大量地使用了模式匹配功能,因此为了更好地编写scala程序,并且更加通畅地看懂spark源码。
模式匹配的基础语法(案例:成绩评价)
scala提供了更加强大的match case语法,即模式匹配。它可以匹配各种类型:比如变量的类型、集合的元素、有值或无值
match case的语法:变量 match{ case 值 => 语法}
如果值为下划线,则代表了不满足以上所有情况下的默认情况如何处理。
match case中,主要一个case分支满足并处理了,就不会继续判断下一个case分支了。
对类型进行模式匹配(案例:异常处理)
scala的模式匹配可以直接匹配类型,而不是值
语法: 变量 match case 变量:类型 => 代码
对Array和List的元素进行模式匹配(案例:对朋友打招呼)
对Array进行模式匹配,分别可以匹配带有指定元素的数组,带有指定个数元素的数组、以某元素打头的数组
对List进行模式匹配,与Array类似,但是需要使用List特有的 :: 操作符
case class与模式匹配(案例:学校门禁)
scala中提供了一种特殊的类,用case class进行声明也称为样例类。
case class有点类似于java中的javaBean的概念,只定义了field, 并且由scala编译时自动提供Getter和setter方法,但是是没有method也就是方法
case class 的主构造函数接收的参数通常不需要使用var或val修饰,scala自动就会使用val修饰,除非自己定义了var。 否则默认为val
scala自动为case class定义了伴生对象,也就是同名的object。并且定义了apply()方法,该方法接收主构造函数中相同的参数,并返回case class对象
Option与模式匹配(案例:成绩查询)
scala有一种特殊的类型,叫做Option,
Option有两种值,一种是Some 表示有值,
一种是None 表示没有值
Option通常会用于模式匹配中,用于判断某个变量时有值还是没有值,这比null来的更加简洁明了
Option的用法必须掌握,spark源码使用了大量Option 比如Some(a) None 等
修改传入参数为Int类型
首先对map进行key、value 反转, 然后 gg函数传入Int类型, 判断Int类型