Scala模式匹配:
Java:对一个值进行条件判断,然后针对不同的条件进行不同的处理
变量 match {
case value1 => 代码1
case value2 => 代码2
…
case _ => 代码N
}
package com.imooc.scala.course06
import scala.util.Random
object MatchApp extends App {
//最基础的模式匹配
val names = Array("小范诗仙","院长","庆帝")
val name = names(Random.nextInt(names.length))
name match {
case "小范诗仙" => println("范闲")
case "院长" => println("陈萍萍")
case _ => print("真不知道你们在说神马")
}
//加条件的匹配
def judgeGrade(name:String,grade:String): Unit ={
grade match {
case "A" => println("Excellent...")
case "B" => println("Good...")
case "C" => println("Just so so...")
case _ if(name=="lisi")=> println(name + " ,you are a good boy, but...")
case _ => println(name + "You need work harder...")
}
}
judgeGrade("zhangsan","A")
judgeGrade("lisi","D") // 双重过滤
Array模式匹配
def greeting(array:Array[String]): Unit ={
array match{
case Array("范闲") => println("嗨,范闲")
case Array(x,y) => println("Hi: "+ x +" , "+y)
case Array("范闲",_*) => println("嗨,范闲和其他小伙伴...")
case _ => println("Hi, everybody...")
}
}
greeting(Array("叶青眉","范闲","陈萍萍","庆帝"))
}
List模式匹配
def greeting(list:List[String]): Unit ={
list match {
case "范闲"::Nil => println("嗨,范闲")
case x::y::Nil => println("嗨,"+x+" , "+y)
case "范闲"::tail => println("嗨, 范闲和其他朋友")
case _=>println("hi, everybody")
}
}
greeting(List("范闲","陈萍萍","庆帝"))
//类型匹配
def matchType(obj:Any): Unit ={
obj match{
case x:Int => println("Int")
case s:String => println("String")
case m:Map[_,_] => m.foreach(println)
case _ => println("other type")
}
}
matchType(Map("name"->"PK"))
case class模式匹配
def caseclassMath(person:Person): Unit ={
person match {
case CTO(name,floor)=>println("CTO name is: "+name+" , floor is "+floor)
case Employee(name,floor)=>println("Employee name is: "+name+" , floor is "+floor)
case _=>println("other")
}
}
class Person
case class CTO(name:String,floor:String) extends Person
case class Employee(name:String,floor:String) extends Person
case class Other(name:String) extends Person
caseclassMath(CTO("PK","22"))
caseclassMath(Employee("zhangsan","19"))
caseclassMath(Other("other"))