Scala学习——match,case 模式匹配
Scala 提供了强大的模式匹配机制,应用也非常广泛。
一个模式匹配包含了一系列备选项,每个都开始于关键字 case。每个备选项都包含了一个模式及一到多个表达式。箭头符号 => 隔开了模式和表达式。
简单示例:
object Test { def main(args: Array[String]) { println(matchTest(3)) } def matchTest(x: Int): String = x match { case 1 => "one" case 2 => "two" case _ => "many" } }
执行以上代码,输出结果为:many
示例代码:
package com.dtspark.scala.test //case class 是一个模式类,而case object 是全局的一个唯一的实例, //模式类之间不能互相继承,必须统一继承一个抽象类或者trait class DataFrameWork //模式类,与普通类没什么区别,只是一定要有参数 case class ComputationFramework(name:String,popular:Boolean)extends DataFrameWork case class StorageFramework(name:String,popular:Boolean)extends DataFrameWork object helloPatternMatch { def main(args: Array[String]): Unit = { getSalary("dddd",6) getMatchType(6.0) getMatchCollection(Array("Scala","hadoop")) getBigDataType(ComputationFramework("Spark",true)) val _map = Map("Spark"->"hot","hadoop"->"half_hot") getValue("Spark",_map) } def getSalary(name:String,age:Int){ name match{ //从前往后匹配 case "Spark"=>println("$150000/year") case "Hadoop"=>println("$100000/year") //加入判断条件(用变量接受参数) case _name if age>=5 =>println(name+":"+age+" $140000/year") case _ =>println("$90000/year")//都不匹配时 } } //对类型进行匹配 def getMatchType(msg:Any){ msg match{ case i : Int=>println("Integer") case s : String=>println("String") case d : Double=>println("Double") case _=>println("Unknow type") } } //对数组的匹配 def getMatchCollection(msg:Array[String]){ msg match{ case Array("Scala")=>println("one element") case Array("Scala","Java")=>println("two element") //以Scala开头的数组(可有多个成员) case Array("Scala",_*)=>println("many element begin from scala") case _=>println("Unknow type") } } //对类的匹配 def getBigDataType(data:DataFrameWork){ data match{ case ComputationFramework(name,popular)=> println("computationFramework "+"name:"+name+" popular:"+popular) case StorageFramework(name,popular)=> println("StorageFramework "+"name:"+name+" popular:"+popular) case _ =>println("Some other type") } } /** * 对map的匹配 * 特别注意some和none的使用 */ def getValue(key:String,content:Map[String,String]){ content.get(key) match{ case Some(value)=>println(value) case None=>println("No found!!") } } }