Scala基礎:模式匹配和樣例類
阿新 • • 發佈:2018-11-11
模式匹配
package com.zy.scala import scala.util.Random /** * 模式匹配 */ object CaseDemo { def main(args: Array[String]): Unit = { //匹配字串 val arr1 = Array(" hadoop", " zookeeper", " spark ") val name = arr1(Random.nextInt(arr1.length)) name match { case " hadoop " => println(" 大資料分散式儲存和計算框架 ...")case " zookeeper " => println(" 大資料分散式協調服務框架 ...") case " spark " => println(" 大資料分散式記憶體計算框架 ...") case _ => println(" 我不認識你 ...") } //匹配資料型別 val arr2 = Array("hello", 1, 2.0, CaseDemo) val v = arr2(Random.nextInt(4)) println(v) v match { casex: Int => println("Int " + x) case y: Double if (y >= 0) => println("Double " + y) case z: String => println("String " + z) case _ => throw new Exception("not match exception") } //匹配陣列 val arr = Array(1, 3, 5) arr match { case Array(1, x, y) => println(x + " " + y)case Array(0) => println("only 0") case Array(0, _*) => println("0 ...") case _ => println("something else") } //匹配集合 val lst = List(3, -1) lst match { case 0 :: Nil => println("only 0") case x :: y :: Nil => println(s"x: $x y:$y") case 0 :: tail => println("0 ...") case _ => println("something else") } //匹配元組 val tup = (1, 3, 7) tup match { case (1, x, y) => println(s"1, $x , $y") case (_, z, 5) => println(z) case _ => println("else") } /** * 注意:在 Scala 中列表要麼為空(Nil 表示空列表)要麼是一個 head 元素加上一個 tail 列表。 * 9 :: List(5, 2) :: 操作符是將給定的頭和尾建立一個新的列表 * 注意::: 操作符是右結合的,如 9 :: 5 :: 2 :: Nil 相當於 9 :: (5 :: (2 :: Nil)) */ } }
樣例類的模式匹配
package com.zy.scala import scala.util.Random //樣例類 case class SubmitTask(id: String, name: String) case class HeartBeat(time: Long) case object CheckTimeOutTask object CaseClsDemo { def main(args: Array[String]): Unit = { //模式匹配 樣例類 val arr = Array(CheckTimeOutTask, HeartBeat(12333), SubmitTask("0001", "task- - 0001")) arr(Random.nextInt(arr.length)) match { case SubmitTask(id, name) => { println(s" $id , $name") } case HeartBeat(time) => { println(time) } case CheckTimeOutTask => { println("check") } } } }