scala-模式匹配(字符串、数组、元组、集合、类、偏函数)

简介: scala-模式匹配(字符串、数组、元组、集合、类、偏函数)

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)))
 
  }
}

打印结果:

目录
相关文章
|
6月前
|
Scala 容器
Scala学习--day04--集合、常用方法、案例实操 - WordCount TopN、不同省份的商品点击排行
Scala学习--day04--集合、常用方法、案例实操 - WordCount TopN、不同省份的商品点击排行
107 2
|
6月前
|
Scala
Scala中的类和对象:定义、创建和使用
Scala中的类和对象:定义、创建和使用
156 1
|
6月前
|
分布式计算 Java 大数据
Scala:样例类、模式匹配、Option、偏函数、泛型(三)
Scala:样例类、模式匹配、Option、偏函数、泛型(三)
75 0
|
1月前
|
分布式计算 大数据 Java
大数据-87 Spark 集群 案例学习 Spark Scala 案例 手写计算圆周率、计算共同好友
大数据-87 Spark 集群 案例学习 Spark Scala 案例 手写计算圆周率、计算共同好友
49 5
|
1月前
|
分布式计算 关系型数据库 MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
48 3
|
1月前
|
消息中间件 分布式计算 NoSQL
大数据-104 Spark Streaming Kafka Offset Scala实现Redis管理Offset并更新
大数据-104 Spark Streaming Kafka Offset Scala实现Redis管理Offset并更新
38 0
|
1月前
|
消息中间件 存储 分布式计算
大数据-103 Spark Streaming Kafka Offset管理详解 Scala自定义Offset
大数据-103 Spark Streaming Kafka Offset管理详解 Scala自定义Offset
81 0
|
1月前
|
分布式计算 大数据 Java
大数据-86 Spark 集群 WordCount 用 Scala & Java 调用Spark 编译并打包上传运行 梦开始的地方
大数据-86 Spark 集群 WordCount 用 Scala & Java 调用Spark 编译并打包上传运行 梦开始的地方
21 1
大数据-86 Spark 集群 WordCount 用 Scala & Java 调用Spark 编译并打包上传运行 梦开始的地方
|
1月前
|
SQL 分布式计算 Java
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
34 0
|
1月前
|
缓存 分布式计算 大数据
大数据-90 Spark 集群 RDD 编程-高阶 RDD容错机制、RDD的分区、自定义分区器(Scala编写)、RDD创建方式(一)
大数据-90 Spark 集群 RDD 编程-高阶 RDD容错机制、RDD的分区、自定义分区器(Scala编写)、RDD创建方式(一)
41 0