小记--------scala-模式匹配

Posted yzqyxq

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小记--------scala-模式匹配相关的知识,希望对你有一定的参考价值。

模式匹配,类似于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类型
技术图片
 
 

以上是关于小记--------scala-模式匹配的主要内容,如果未能解决你的问题,请参考以下文章

详解 Scala 模式匹配

Scala 匹配模式

Spark记录-Scala模式匹配

scala 常用模式匹配类型

Scala笔记--模式匹配

Scala笔记--模式匹配