数据工程师

scala 模式匹配

2017-07-21  本文已影响1人  苟雨

scala的模式匹配与java的switch case相似,但是switch case只能对值进行判断,scala还可以对类型,集合进行模式匹配。其中最重要的是对case class 匹配。
其中有多种的匹配的模式:

常量变量匹配

  def bigData(data : String): Unit ={
    data match {

        case "spark" => println("spark")
        case "hadoop" => println("hadoop")
//        case 中实际上是偏函数
        case _ if data == "luo" => println("Luo") // 使用守卫
        case data_ if data_ == "carey" => println("carey") // 可以把值传入赋给新的变量  匹配的是if 后面的变量
        case _ => println("something else")


    }
  }

类型模式

  def exception(e : Exception): Unit ={
    e match {
        case fileEx : FileNotFoundException => println("file not fuond",fileEx) // 新定义的变量只是接受赋值 而她的类型才是重要的
        case _ : Exception => println("exception some what",e)

    }

}
```

匹配集合  序列化模式
```
  def match_collec(array : Any): Unit ={
    array match {
        case Array("scala") => println("scala arr")
        case Array("hello","scala","mm") => println("mm")
        case Array(one,two) => println(one,two)  // 对数组的元素的个数进行匹配 会将第一个值赋给one 第二个值赋给two  元组模式
        case Array("hello",_*) => println("array start with hello")  // 匹配开始为为hello的数组  使用_* 通配
        case List(_,"one","owo") => println("match list")  // 使用占位符
        case _ => println("something else")
    }
}
```


 案例类
构造器模式
```
//  case class  的参数会自动用 val修饰 编译器自动生成伴生对象  伴生对象的unapply() 方法 接受参数执行就生成 新实例
  class Person
  case class Worker(name:String,age:Int) extends Person
  case class Student(name:String,books:Int) extends Person

  def match_construct(p: Person): Unit ={
    p match {
      //构造器模式必须将Person类定义为case class,否则需要自己定义伴生对象并实现unapply方法。
        case Worker(name,age) => println("worker",name,age)
        case Student(name,books) => println(name,"have",books)
        case _ => println("unknown this ")
    }
  }
```



上一篇下一篇

猜你喜欢

热点阅读