scala之模式匹配

匹配字符串

import scala.util.Random


object CaseDemo1 {
  val arr = Array("YoshizawaAkiho", "YuiHatano", "AoiSola")
  val name: String = arr(Random.nextInt(arr.length))
  println(s"name is:$name")
  name match {
    case "YoshizawaAkiho" => println("吉泽")
    case "YuiHatano" => println("波多老实")
    case _ => println("笑贫不笑*")//最后一个选择_是因为需要一步一步执行  不管是啥都能接住
  }

  def main(args: Array[String]): Unit = {
    CaseDemo1
  }
}

匹配类型

object CaseDemo2 {
  //匹配类型
  val arr: Array[Any] = Array("hello", 1, -2.0, CaseDemo2)
  val v: Any= arr(Random.nextInt(arr.length))
  println(v)
  v match {
    case x: Int => println("Int" + x)
    case y: String => println("String"+y)
    case _ => println("爱啥啥")
  }

  def main(args: Array[String]): Unit = {
    CaseDemo2
  }
}

 

集合匹配

package com.doit.scala.day03.cases

object CaseDemo3 {
  //匹配数组
  val arr = Array(0, 1, 3, 4)
  arr match {
    case Array(1,x,y) =>println(x+ " " +y)
    case Array(0,*) =>println("0...")
    case _ => println("啥也不是")
  }
  //匹配List
  val lst = List(0, 1, 2, 3)
  lst match {
    case 0 :: Nil => println("就0")
    case 0 :: tail => println("0和很多")
    case x :: y :: Nil => println("俩数")
    case _ => println("啥也不是")
  }
  //匹配元组
  val tup = (3, 3.0, "abc")
  tup match {
    case (2, x, y) => println(s"ok, $x , $y")
    case (_, z, "abc") => println(z)
    case  _ => println("else")
  }
}

匹配option

package com.doit.scala.day03.cases

object GetDemo {
  def main(args: Array[String]): Unit = {
    val mp = Map("a" -> 1, "b" -> 2, "c" -> 3)
    //val r: Int = mp("d")

    val r = mp.getOrElse("d", -1)

    //Option代表:可能有,也可能没有
    //Option有两个子类:Some 一定有 和 None 一定没有
    val o: Option[Int] = mp.get("c")
    val i = o match {
      case Some(value) => value
      case None => -1
    }
    println(i)
  }
}

类名匹配

package com.doit.scala.day03.cases
//多例,不需要new,自动实现序列化接口
//case class的功能:注意的功能就是进行模式匹配,封装数据,匹配后进入到对应的case,执行对应逻辑
case class SubTask(id: String, var name: String)

case class Heartbeat(id: Long)

//case object,单例的,就一个实例,不封装数据
case object CheckTimeOut
object SubTask {
  def main(args: Array[String]): Unit = {
    val arr: Array[Product] = Array(new SubTask("100", "Submit"), SubTask("8888", "Submit888"), Heartbeat(200L), CheckTimeOut)
    val ele = arr(3)
    ele match {
      case SubTask(id,name) => println("SubTask")
      case Heartbeat(id) => println("Heart")
      case CheckTimeOut => println("Check")
    }


  }
}

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值