大数据技能AI Flink/Spark/Hadoop/数仓股价模式匹配,数据析、面试股价模式匹配,源解读等干货学习材料 101篇原创内容 -->
大众
Scala 的模式匹配类似于 Java 的 switch 语法
但是 scala 从语法弥补了更多的功用股价模式匹配,所以愈加强壮。
(1)如果一切 case 都不匹配,那么会履行 case _ 支,类似于 Java default 语句,
若此没有 case _ 支,那么会抛出 MatchError。
(2)每个 case ,不需要使用 break 语句,主动断 case。
(3)match case 语句可以匹配任何类型,而不只是字面量。
(4)=> 后边的代块,直到下一个 case 语句之前的代是作为一个整履行,
可以 使用{}括起来,也可以不括。
2 模式守卫阐明如果想要表达匹配某个规模的数据,就需要在模式匹配增加条件守卫。
事例实操 def abs: Int = { num match { case i if i >= 0 => i case i if i < 0 => -i } } println)3 模式匹配类型3.1 匹配常量 def test: String = x match { case 1 => Int one case hello => String hello case true => Boolean true case + => Char + case _ => } println) println) println) String hello Char +3.2 匹配类型需要进行类型判别,可以使用前文所学的 isInstanceOf[T]和 asInstanceOf[T],也可使
用模式匹配完成相同的功用。
def test: String = x match { case i: Int => Int + i case s: String => String + s //case list: List[String] => List + list case array: Array[Int] => Array[Int] + array.mkString //泛型擦除 case m: List[_] => List+m case a => else: + a } println) println) //泛型擦除 println)) //泛型擦除 println)) println)) println)) Int 35 String hello List List List List else: [Ljava.lang.String;@6e8dacdf Array[Int] 2,233.3 匹配数组scala 模式匹配可以对集进行准确的匹配,例如匹配只要两个元素的、且个元素
为 0 的数组。
for , Array, Array, Array, Array, Array )) { val result = arr match { case Array => 0 case Array => Array // 匹配两元素数组 case Array => Array: + x + , + y case Array => 以0头的数组 case Array => 间为1的三元素数组 case _ => else } println } 0 Array 以0头的数组 间为1的三元素数组 else 间为1的三元素数组3.4 匹配列表方式一:
for , List, List, List, List, List )) { val result = list match { case List => 0 case List => List: + x + , + y case List => List case List => List: + a case _ => else } println } 0 List: 1, 0 List else List: 88 List: hello方式二:
val list = List //val list = List list match { case first :: second :: rest => println case _ => println } first: 1, second: 2, rest: List3.5 匹配元组 for , , , , , )){ val result = tuple match { case => + a + , + b //是个元素是 0 的元组 case => //是第二个元素是 1 的元组 case => + a case => + x + + y + + z case _ => else } println } a 12 b 35 c 27 a 13 a: 12 b: 35 c: 27 a: 133.6 匹配目标 object test { def main: Unit = { val student = Student // 针对目标实例的内容进行匹配 val result = student match { case Student => 法外狂徒,张三, 18 case _ => Else } println } } // 定义类 class Student // 定义伴目标 object Student { def ly: Student = new Student // 有必要完成一个unly方法,用来对目标属性进行拆解 def unly: Option[] = { if { None } else { Some) } } }val student = Student,该语句在履行,实践调用的是 Student 伴目标的ly 方法,因而不用 new 关键字就能构造出相应的目标。当将 Student写在 case 后[case Student => 法外狂徒,张三, 18],会默许调用 unly 方法,Student 作为 unly 方法的参数,unly 方法将 Student 目标的 name 和 age 属性提取出来,与 Student的属性值进行匹配case 目标的 unly 方法回来 Some,且一切属性均共同,才算匹配成功,属性不共同,或回来 None,则匹配失利。若只提取目标的一个属性,则提取器为 unly:Option[T]若提取目标的多个属性,则提取器为 unly:Option[]若提取目标的可变个属性,则提取器为 unlySeq:Option[Seq[T]]3.7 样例类 object test { def main: Unit = { val user = User // 针对目标实例的内容进行匹配 val result = user match { case User => zhangsan, 18 case _ => Else } println } } // 定义样例类 case class User样例类依然是类,和一般类比较,只是其主动成了伴目标,而且伴目标主动供给了一些常用的方法,如:ly、unly、toString、equals、hashCode 和 copy。样例