scala 模式匹配

复制代码
package scala

import java.io

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

    /**
      * java中的模式匹配可以匹配,基本数据类型,字符串,枚举
      *
      * scala中的模式匹配,可以匹配基本数据类型,字符串,枚举,匹配对象,匹配类型
      *
      * 按照顺序匹配,只会匹配成功一个
      * 如果前面没有匹配成功会走下划线
      *
      */

    /**
      * 1、匹配基本数据类型
      */

    val i = 100

    i match {
      case 1 => {
        println("i等于1")
      }
      case 100 => println("i等于100")

      //如果前面没有匹配成功匹配下划线
      case _ => println("默认")
    }

    /**
      * 2、匹配字符串
      *
      */

    val str = "java"


    str match {
      case "java" => println("java")
      case "scala" => println("scala")
      case _ => println("其它")
    }


    /**
      * 3、匹配对象
      *
      */
    case class User(id: String, name: String)

    val user: User = User("001", "张三")

    user match {
      case User("001", "张三") => println("张三")
      case User("002", "李四") => println("李四")
      case _ => println("其它")
    }


    /**
      * 4、匹配类型
      *
      */

    val j: Any = 100.1


    j match {
      //这路的i  代表的是上面的j  执行类型自动做了转换
      case i: Int => println("int类型" + i)
      case s: String => println("string类型" + s)
      case _ => println("其它类型" + j)
    }


    /**
      * 匹配成功之后可以由返回值
      *
      */

    val k = 100

    val r: Int = k % 2 match {
      //匹配成功之后返回
      case 1 => k + 1
      case 0 => k * 2
    }

    var s = 0
    if (k % 2 == 1) {
      s = k + 1
    } else {
      s = k * 2
    }
    println(r)
    println(s)


    /**
      * 模式匹配的应用
      *
      */

    val map = Map("001" -> "张三", "002" -> "李四")

    val name: String = map.getOrElse("001", "默认值")


    /**
      * Option ; 由两个取值,Some  None
      * some代表有值
      * None 代表没有值
      *
      */

    val option: Option[String] = map.get("003")

    val value: String = option match {
      //如果有值返回对应的值
      case Some(v) => v
      //如果没有值返回默认值
      case None => "默认值"
    }


    val list: List[(String, Int)] = List(("001", 23), ("002", 24), ("003", 25))


    list.map(kv => {
      val id: String = kv._1
      val age: Int = kv._2
      (id, age + 1)
    })


    /**
      * 使用case 代替lambda 表达式
      *
      * 需要将小括号替换成大括号
      */


    val list1: List[(String, Int)] = list.map {
      //匹配集合中的数据是否满足指定类型
      case (id: String, age: Int) =>
        (id, age + 1)
    }

    list1.foreach(println)


  }

}
复制代码

 

posted @   坤坤无敌  阅读(132)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
点击右上角即可分享
微信分享提示