scala-模式匹配(字符串、数组、元组、集合、类、偏函数)
Scala 提供了强大的模式匹配机制,应用也非常广泛。
一个模式匹配包含了一系列备选项,每个都开始于关键字 case。每个备选项都包含了一个模式及一到多个表达式。箭头符号 => 隔开了模式和表达式。
一、字符串模式匹配
package day02.mathdemo
import scala.util.Random
/**
* 模式匹配(字符串)
* 类似于Java中的switch case
*/
object MatchStr{
def main(args: Array[String]): Unit = {
val arr = Array("xm","xh","xl","xzs")
val name = arr(Random.nextInt(arr.length))
println("name: "+name)
name match {
case "xm" =>println("小明")
case "xh" =>println("小红")
case "xl" =>println("小亮")
case "xzs" =>println("小竹笋")
case _ =>println("Nothing")
}
}
}
打印结果
二、数组
package day02.mathdemo
//模式匹配
import scala.util.Random
object MatchType {
def main(args: Array[String]): Unit = {
val arr = Array("xm", 123, 3.26, true, MatchType)
val name = arr(Random.nextInt(arr.length))
println("name: " + name)
name match {
case str: String => println(s"match String $str")
case int: Int => println(s"match Int $int")
case double: Double => println(s"match Double $double")
case boolean: Boolean => println(s"match Boolean $boolean")
case matchTest: MatchTest => println(s"match MatchTest $matchTest")
case _: Any => println("nothing")
}
}
}
class MatchTest{
}
打印结果:
三、元组、集合
package day02.mathdemo
/**
* 匹配数组、元组、集合
*/
object MatchList {
def main(args: Array[String]): Unit = {
/*
*匹配数组
*/
val arr = Array(1,4,6,8)
arr match {
case Array(1,x,y,z) =>println(s"case: $x,$y,$z")
case Array(_,x,y) => println(s"case: $x,$y")
case _ => println("nothing")
}
/*
*匹配元组
* 注意:元组匹配中的时候,元组内的个数是确定的
*/
val tup = (1,4,6,8)
tup match {
case (1,x,y,z) =>println(s"case: $x,$y,$z")
case (4,w,s,t) => println(s"case: $w,$s,$t")
case _ => println("nothing")
}
/*
*匹配集合
* 注意: ::表示从右往左list合并;
* NIL表示空的集合;
* case1表示是一个空的list集合+0 就是只有一个0的list集合。
*/
val list01 = List(0,1,3,5,6)
list01 match {
case 0 :: Nil =>println("case1:0")
case a :: b :: c :: d :: e :: Nil =>println(s"case2 : $a,$b,$c,$d,$e")
case 0 :: b :: Nil =>println(s"case3: $b")
case List(0,1,3,5,6) => println("这个也可以匹配到")
case _ => println("not found")
}
}
}
打印结果:
四、类
package day02.mathdemo
import scala.util.Random
/**
* 样例类
* 注意:在样例类中case中,需要将参数设定好
*/
object CaseClassDemo {
def main(args: Array[String]): Unit = {
val arr = Array(HertBeat(2000L),SubmitTask("1000","提交"),CheckTimeOutTask)
arr(Random.nextInt(arr.length)) match {
case HertBeat(time) =>println("HertBeat")
case SubmitTask(id,task) =>println("submitTask")
case CheckTimeOutTask =>println("CheckTimeOutTask")
}
}
}
case class HertBeat(time:Long)
case class SubmitTask(id:String,task: String)
case class CheckTimeOutTask
打印结果:
五、偏函数
package day02.mathdemo
import scala.util.Random
/**
* 模式匹配-偏函数PartialFunction[A,B]
* A:参数类型
* B:返回值类型
* 常用:输入模式匹配
*
*/
object PartialFunctionDemo {
def m1:PartialFunction[String,Int] = {
case "one" => {
println("I am one")
1
}
case "two" => {
println("I am two")
2
}
}
def m2(str:String):Int = str match {
case "one" =>{
println("I am one one")
11
}
case "two" =>{
println("I am two two")
2
}
}
def main(args: Array[String]): Unit = {
val str = Array("one","two")
m1(str(Random.nextInt(str.length)))
m2(str(Random.nextInt(str.length)))
}
}
打印结果:
欢迎订阅关注公众号(JAVA和人工智能)
获取更多免费书籍、资源、视频资料
文章超级链接: