Scala的模式匹配怎么用和JAVA的switch有什么区别

在JAVA中有switch,scala有match,而且在应用上比JAVA的更加灵活,JAVA可以接收如下六种数据类型,如下

1、int
2、char
3、byte
4、short
5、枚举
6、 String  JDK版本必须为1.7及以上版本

附带C++的:
https://blog.csdn.net/dudadudadd/article/details/112430159

而scala的match就比较nice了,除了所有基础数据类型之外,match还可以对数据的格式进行匹配,下面我给大家列举了如下的使用方法

对值进行匹配,通配符为其他

package com.wy

import scala.util.Random

object CaseDemo01 {
    
    
  def main(args: Array[String]): Unit = {
    
    
    val arr = Array("hadoop", "zookeeper", "spark")
    val name = arr(Random.nextInt(arr.length))
    name match {
    
    
      case "hadoop"    => println("大数据分布式存储和计算框架...")
      case "zookeeper" => println("大数据分布式协调服务框架...")
      case "spark"     => println("大数据分布式内存计算框架...")
      case _ => println("我不认识你...")
    }
  }
}

对值的类型做匹配,且书写的表达式,可以带入后面做相关操作

package com.wy

import scala.util.Random

object CaseDemo02{
    
    
  def main(args: Array[String]): Unit = {
    
    
    val arr = Array("hello", 1, 2.0, CaseDemo02)
    val v = arr(Random.nextInt(4))
    println(v)
    v match {
    
    
      case x: Int => println("Int " + x)
      case y: Double if(y >= 0) => println("Double "+ y)
      case z: String => println("String " + z)
      case _ => throw new Exception("not match exception")
    }
  }
}

对数据的格式做匹配,其中_*标识多位的任意数

package com.wy

object CaseDemo03 {
    
    
  def main(args: Array[String]): Unit = {
    
    
    /*val arr = Array(1,2,3,4)
    arr match {
    
    
      case Array(1, x, y) => println(x + " " + y)
      case Array(0) => println("only 0")
      case Array(0, _*) => println("0 ...")
      case _ => println("something else")
    }*/

    val tup = (1, 3, 5)
    tup match {
    
    
      case (1, x, y) => println(s"1, $x , $y")
      case (_, z, 5) => println(z)
      case  _ => println("else")
    }
  }
}

对容器中的一个值做匹配

package com.wy

import scala.util.Random

case class SubmitTask(id: String, name: String)
case class HeartBeat(time: Long)
case object CheckTimeOutTask //object CheckTimeOutTask

object CaseDemo04 {
    
    
  def main(args: Array[String]): Unit = {
    
    

    val arr = Array(CheckTimeOutTask, HeartBeat(12333), SubmitTask("0001", "task-0001"))

    arr(Random.nextInt(arr.length)) match {
    
    
      case SubmitTask(id, name) => {
    
    
        println(s"$id, $name")
      }
      case HeartBeat(time) => {
    
    
        println(time)
      }
      case CheckTimeOutTask => {
    
    
        println("check")
      }
    }
  }
}

大致核心的操作就是这几类,大家用的时候围绕发散就可以了

猜你喜欢

转载自blog.csdn.net/dudadudadd/article/details/112802814
今日推荐