关于Scala中的match case方法的使用

在scala中有一个方法 match 类似于java内的 switch,但是其功能却比 switch 强大了不止一点

switch:条件分支

match:模式匹配

在java内使用switch若是不加break将会导致穿透,但是match却不需要担心,其用法类似switch,常配合case使用

//值的匹配

val a = 3
val x = a match{
    case 3 => "1"
    case 4 => "2"
    case 5 => "3"
    case _ => "default"      
}
println(x) // 1

//这里值不限定于数值类型,其他类型同样适用
val b = "1"
val y = b match {
    case "1" => "剪刀"
    case "2" => "石头"
    case "3" => ""
}
println(y) // "剪刀"

//多值的匹配

List(5,10,15,20) match{
    case one :: two :: three => println(one,three) // :: 为中缀表达式
    case _ => println("hehe")  // _通配符 在这作用相当于switch内结尾的default
}
// (5,List(15,20))

 //模式守卫

val a = 3
val b = a match {
  case a if (a>0)  => "值大于0"
  case _ => "值小于0"  
}
println(b)  //值大于0
var a = List(1,2,3,4)
var b = a.groupBy(x=>x match{
     case x if (x%2==0)  => "even number"
     case _ => "uneven number"
})
println(b)  //Map(even number -> List(2, 4), uneven number -> List(1, 3))

 //类型转换

def a(x:Any)={
    x match{
        case i:Int => x.asInstanceOf[Int] + 10
        case i:String => "hello"
        case _ => x
    }
}
print(a(20))  //30
原文地址:https://www.cnblogs.com/afeiiii/p/13675204.html