模式匹配「建议收藏」

模式匹配「建议收藏」模式匹配值匹配数据类型匹配集合数组匹配caseclass匹配变量person是case中匹配对象的父类Option[T]匹配模式匹配和高级函数连用

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

模式匹配

  1. 模式匹配:就是对变量的进行判断,针对不同的条件进行不同的处理
  2. 模式匹配的关键点:变量A中的数据类型包含case中所有的数据类型(变量A的数据类型是模式匹配中类型xx的向上转型)
  3. 模式匹配的几种情况:
    1. 对值进行匹配 
    2. 对数据类型进行匹配 :基本语法(变量A match {case 变量: 类型 => 代码})
    3. 对集合数组进行匹配(如:Array和List)
    4. 对case class 进行模式匹配
    5. 对Option[T]进行模式匹配
    6. 模式匹配和高级函数连用:基本语法     list.map{case xxx => 函数体} (list中的每一个值都进行一次模式匹配)
  4. match case 的基本语法:变量A match {case xx => 代码块}    模式匹配从上往下匹配,只要case 满足条件,就不会继续匹配判断下面的分支了
  5. 如果上面所有情况下的都没有匹配到,最后用_表示其他类型。(默认是_,也可以用其他的变量名)
  6. 模式匹配可以在case后的条件里面再加一个if条件
  7. 如果匹配到的是一个变量名称xx,则就会将匹配值A赋值给这个变量xx
  8. 在高阶函数中使代码更具有可读性

值匹配

对值进行模式匹配
   object valueTest{
        def main(args: Array[String]): Unit = {
          def Score(score:String): Unit ={
            score match {
              case "A"=>println("very good")
              case "B"=>println("good")
              case "C"=>println("just soso")
              case other  =>println("terrible")     //默认是_,也可以用其他的变量名
            }
          }
          Score("D")
        }
      }
在模式匹配中使用if守卫:在case后的条件里面再加一个if条件
object valueTest{
      def main(args: Array[String]): Unit = {
        def Score(name:String,score:String): Unit ={
          score match {
            case "A"=>println("very good")
            case "B"=>println("good")
            case "C"=>println("just soso")
            case _ if name=="James"=>print(s"come on !!!  $name")   //if守卫
            case _ =>println("terrible")
          }
        }
        Score("James","F")
      }
    }

 

在模式匹配中进行变量赋值:如果模式匹配的默认情况为一个变量名xx,则就会将要匹配的值A赋值给这个变量xx,可以在后面的处理语句中使用该值
object valueTest{
      def main(args: Array[String]): Unit = {
        def Score(name:String,score:String): Unit ={
          score match {
            case "A"=>println("very good")
            case "B"=>println("good")
            case "C"=>println("just soso")
            case _ if name=="James"=>print(s"come on !!!  $name")
            case other  =>println("terrible, you just "+other)  //变量赋值
          }
        }
        Score("Jamues","F")
      }
    }

数据类型匹配

基本语法:变量A match {case 变量: 类型 => 代码}
//变量Excep的数据类型是模式匹配中类型excipn的父类
object ExceptionTest{
  def main(args: Array[String]): Unit = {
    import java.io._
    def funException(Excep: Exception) {
      Excep match {
        case excip1: IllegalArgumentException => println(excip1)
        case excip2: FileNotFoundException => println( excip2)
        case excip3: IOException => println( excip3)
        case _: Exception => println("............" )
      }
    }
    funException(new IOException("..."))
  }
}

集合数组匹配

  1. 可以匹配带有指定元素的数组
  2. 特定结构
  3. 以某元素打头的数组
object ArrayTest{
  def main(args: Array[String]): Unit = {
    def playBall(arr: Array[Any]) {
      arr match {
        case Array("basketball") => println("play basketball")  //匹配一个元素
        case Array(ball1,(ball2,ball3)) => println("一个单个元素,一个二元组") //匹配特定结构
        case Array("ball", _*) => println("ball start ") //匹配以ball开头
        case _ => println("hey, who are you?")
      }
    }
    playBall(Array("ball"))
  }
}

 

case class匹配

变量person是case中匹配对象的父类

class Person
case class Teacher(name: String, subject: String) extends Person
case class Student(name: String, classroom: String) extends Person
object MatchTest {
    def main(args: Array[String]): Unit = {
      def judgeIndentity(person: Person): Unit = {
        person match {
          case Teacher(name, subject) => println(s"name = $name, subject = $subject")
          case Student(name, classroom) => println(s"name = $name, classroom = $classroom")
          case _ => println("........................")
        }
      judgeIndentity(Student("xz", "1001"))
    }
  }
}

 

Option[T]匹配

Option[T]用在模式匹配中用来判断变量是否有值(对有值和无值做不同的处理)
object OptionTest{
  def main(args: Array[String]): Unit = {
    val person = Map(("Tom",15),("Wiki",26))
    val age: Option[Int] = person.get("Toms")
      age match {
        case Some(grade) => println(s" is ${age.get} years")
        case None => println("who are you")
      }
  }
}

 模式匹配和高级函数连用

 

  1. 基本语法: list.map{case xxx =>  函数体}
  2. list中的每一个值都进行一次模式匹配
  3. 在高阶函数中使代码更具有可读性
object MatchTest {
    def main(args: Array[String]): Unit = {
      // 将列表中字母变成大写
      val list  = List((1, ("aa", 11)), (2, ("bb", 22)), (3, ("cc", 33)))
      list.map(item => (item._1, (item._2._1.toUpperCase, item._2._2)))

      // 模式匹配使代码更具有可读性
      list.map{
        case (id,(na,ages)) =>(id,(na.toUpperCase(),ages))
      }
  }
}

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/166930.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 基尼系数计算方法_西南财经大学基尼系数

    基尼系数计算方法_西南财经大学基尼系数上图图片来自维基百科·自由的百科全书最近在尝试做一些流量调控的事情,流量对于任何商业系统都是宝贵的资源,不能任由他人无限制获取,且需要通过一定手段加以调控,以期用户体验、平台生态、平台利益多方最大化。这个目标是宏大而美好的,但总要一步步慢慢来。先说如何平衡生态问题(当然指的是B端用户),生态问题就像国民收入均衡问题一样,常用的就是基尼系数,维基百科的中文链接要FQ才能打开,好伤心,英文的我…

    2022年10月13日
    0
  • Hbase面试题总结(大数据面试)

    Hbase面试题总结(大数据面试)概述

    2022年5月6日
    52
  • C语言的整型溢出问题 int、long、long long取值范围 最大最小值「建议收藏」

    C语言的整型溢出问题 int、long、long long取值范围 最大最小值「建议收藏」溢出和取值范围C语言的整型溢出问题整数溢出int、longint、longlongint占用字节疑问《C和指针》中写过:long与int:标准只规定long不小于int的长度,int不小于short的长度。double与int类型的存储机制不同,longint的8个字节全部都是数据位,而double是以尾数,底数,指数的形式表示的,类似科学计数法,因此double比

    2022年6月3日
    41
  • 创意的课程设计——憨憨钟设计(碾压)

    创意的课程设计——憨憨钟设计(碾压)目录写在前面的话设计的实际演示憨憨钟的主要功能设计的实现过程界面设计模型结构设计元件清单调试异常分析结语写在前面的话大家好,学习之余给大家分享一个这学期设计的课程设计,互相学习借鉴。课程设计,尤其是自定义的课程设计,自盘古开天地以来就困扰着每一位工科男。我,一枚工科男,觉得需要站出来为大家排忧解难了。这学期有自定义的课程设计,所以我就设计了一个很有创意的课程设计,是一个国外开源的设计,结合了国外开源资料和一些大佬的实践经验。设计的实际演示憨憨钟自动写时间的效果:憨憨钟的演示效果1憨憨钟自动画天气

    2022年5月20日
    35
  • case when 判断_sqlservercase用法

    case when 判断_sqlservercase用法casewhen简单用法—改变结果SELECTCASE id WHEN21THEN ‘aaaaa’ WHEN22THEN ‘bbbbb’ELSE’其他’ END FROM hrmresource WHERE id=23casewhen复杂用法—执行不同的sqlSELECT ( CASE WHENa.id=21THEN (SELECTidFROMhrmresourceWHEREidIN(21

    2022年9月5日
    4
  • php elasticsearch_php get

    php elasticsearch_php getweblogic环境下getRealPath()calledwithunsafe问题的处理环境:weblogic,portal4.5问题:访问页面的时候没有任何错误,只是在mydomain.log里面经常会发现下面的错误信息<2007-8-29下午05时21分06秒CST>=2268995,name=wzportal,context-path=/wzportal)]ge…

    2022年9月19日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号