scala学习之模式匹配

时间:2021-06-29 05:50:17
模式匹配下的for循环:
(1)Scala中最基本的For循环表达式和Java是一样的,For表达式的背后是通过foreach方法来实现的。
(2)同时在scala中有变量绑定的概念,我们可以为变量i绑定集合中得一个元素。
(3)在Scala中,通过使用For循环中的模式匹配,可以筛选过滤出集合中的元素
     代码示例:
         for(i <- 1 to 5)(println(i))
         for(index@"FLink" <- List("Hadoop","Spark","Flink")){println(index)}
         for((language,"Hadoop") <- Set("Scala"->"Spark","Java"->"Hadoop"))println(language)
         for((k,v:Int) <- List(("Spark"->5),("Hadoop"->"Big Data"))){println(k)}
模式匹配下的赋值
(1)val a@b = 1000 指的是a、b两个变量绑定到了1000上,并产生了一个二元组记录这两个局部变量值。最终把二元组里的值分别赋给了我们定义的a,b两个变量。
(2)val (c,d)=(1000,2000) 指的是把二元组(1000,2000)中的指分别赋值给c和d 。
(3)val (e,F) = (1000,2000) 中当变量F大写时将被对待为常量模式,也就是说大写F和小写f是两种不同的模式。
(4)object Test { val 1 = 1 } 是一个常量模式匹配,1匹配1,成功。 object Test { val 1 = 2 } 也是个常量模式匹配,但由于object是惰性初始化的原因(lazy),虽然明显不匹配,却可以编译时成功,只是在运行时才报错。
模式匹配下的提取器
(1)在最常用的场景下,提取器是构造器的 反操作:构造器根据参数列表构造一个对象实例,而提取器从一个现有对象实例中将构造时的参数提取出来。
(2)unapply方法的目的是提取我们寻找一个特定的值。它相反的操作和apply一样。当比较使用匹配语句中unapply方法的提取对象将被自动执行。
:> 是提取器的名称,提取器中最关键的方法是unapply方法。
代码示例:
object :> {
  def unapply[A](list: List[A])={
    Some((list.init,list.last))
  }
}
object Extractor_Advanced {
  def main(args: Array[String]): Unit = {
    (1 to 9).toList match{case _ :> 9 => println("Hadoop")}
    (1 to 9).toList match{case x :> 8 :> 9 => println("Spark")}
    (1 to 9).toList match{case :>(:>(_,7),9) => println("Flink")}
  }
}
以上内容是从王家林老师DT大数据课程第75-77讲的学习笔记。
DT大数据微信公众账号:DT_Spark  
王家林老师QQ:1740415547 
王家林老师微信号:18610086859
百度云盘地址:http://pan.baidu.com/s/1dD10KFZ
优酷播放地址:http://v.youku.com/v_show/id_XMTMwMDcxNzY4MA==.html
51cto的播放地址:http://edu.51cto.com/lesson/id-70545.html