scala模式匹配的多种形式

scala的模式匹配功能十分强大
如果cae中涉及到多个类型,那么匹配的变量要不就都是a类型,要么是所有case中类型的父类,
比如 a match{
case x …
case y …
case z …
}
要么 x y z 都是a的类型,要么 就是都是a的子类

1 简单匹配(对比java swich语句)

    val a: Int = 1;
    a match {
      case 1 => println(a + 1)
      case 2 => println(a + 2)
      case _ => println(a + 3)
    }
    val b: String = "1";
    b match {
      case "a" => println("a")
      case "b" => println("b")
      case "c" => println("c")
      case _ => println("other")
    }

2 类型匹配

  val a:Any="1";
    a match {
      case x:Integer => println("Int")
      case y:String => println("String")
      case _      => println("otherType")
    }

x,y不写的话编译不报错,但是运行会报错

3 条件判断

 val a: Int =1;
    a match {
      case x if a>0  && a<=10 => println("x")
      case y if a>10 && a<=20 => println("y")
      case z if a>20 && a<=30 => println("z")
      case _ =>println("other")
    }

4 匹配数组/元组/list

 val arr: Array[String] = Array("zhang","li","zhao","wang")
   arr match{
     case Array("zhang","li") => println("x")
     case Array("li",_*)      => println("xx")
     //相当于匹配个数,并且把数据赋值给变量
     case Array(zhang,li,zhao,wang) => println(zhang+" "+ li +" " + zhao + " " +wang )
     case _ =>println("ohter")
   }
 val tupe = (1,"a",1.00)
    tupe match{
     case (1,"a",2) => println("x")
     case (_,"a",3) => println("xx")
     case (x,_,_)  =>println(x)
     case _ =>println("ohter")
   }
  val list: List[Int] = List(1,2,3,4)
    list match {
        case 1 :: b => println(b)
        case 1 ::  Nil => println(1)
        case null => println(null)
        case Nil => println(Nil)
        case l:List[Int] if list(2)==2 => println("xxx")
    }

5 变量匹配(spark中非常有用)

case  class Person ( var name: String,var age:Int,var address:String)
object Person{
  def main(args: Array[String]): Unit = {
    val liu: Person = new Person("liu",11,"上海市")
    val Person(name,age,address)=liu
    //val Person(name,_,address)=liu
    println(name)
    println(age)
    println(address)
  }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值