scala模式匹配

1.基础match case(类似java里switch case,但功能强大些)

object MatchApp {

  def main(args: Array[String]): Unit = {
val is = Array("a","b","c","d")
val i = is(Random.nextInt(is.length))//随机取数组中的一个值
i match {
case "a" => println("aaa")
case "b" => println("bbb")
case "c" => println("ccc")
case _ => println("没有此匹配")
}
}

2、带条件的模式匹配

package top.ruandb.scala.Course05

import scala.util.Random

object MatchApp {

  def main(args: Array[String]): Unit = {
judgeGrade("jack","A")//非常好
judgeGrade("lucy","B")//好
judgeGrade("lucy","D")//lucy同学,该努力学习了
judgeGrade("jack","D")//同学,该努力学习了
} def judgeGrade(name:String ,grade:String): Unit ={
grade match{
case "A" => println("非常好")
case "B" => println("好")
case "C" => println("一般")
case _ if(name == "lucy") => println(name+"同学,该努力学习了")//带条件筛选
case _ => println("同学,该努力学习了")
}
}
}

3、Array模式匹配

package top.ruandb.scala.Course05

import scala.util.Random

object MatchApp {

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

    greeting(Array("a"))//hi,a
greeting(Array("b","c" ,"d"))//hi.everyone
greeting(Array("a","b","c" ,"d"))//hi,a and others
greeting(Array("c" ,"d"))//hi,c d } def greeting(array:Array[String]): Unit ={ array match {
case Array("a") => println("hi,a")//匹配数组Array("a")
case Array(x,y) => println("hi,"+ x + " "+ y)//匹配两个元素的数组
case Array("a",_*) => println("hi,a and others")//匹配以a开头的数组
case _ => println("hi.everyone")
}
} }

4、List模式匹配

package top.ruandb.scala.Course05

import scala.util.Random

object MatchApp {

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

    greeting(List("a"))//hi,a
greeting(List("b","c" ,"d"))//hi.everyone
greeting(List("a","b","c" ,"d"))//hi,a and others
greeting(List("c" ,"d"))//hi,c d
} def greeting(list:List[String]): Unit ={ list match {
case "a"::Nil => println("hi,a")//匹配只含a的List
case x::y::Nil => println("hi,"+ x + " "+ y)//匹配两个元素的List
case "a"::tail => println("hi,a and others")//匹配以a开头的List
case _ => println("hi.everyone")
}
} }

5、类型匹配

package top.ruandb.scala.Course05

import scala.util.Random

object MatchApp {

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

    matchType(1)//Int: 1
matchType("str")//String; str
matchType(Map("lucy"->18,"jack"->19,"kangkang"->99))//(lucy,18)(jack,19)(kangkang,99)
matchType(3.14)//其他类型 }
def matchType(obj:Any): Unit ={
obj match{
case x:Int =>println("Int: "+ x )
case s:String =>println("String; "+s)
case m:Map[_,_] => m.foreach(println)
case _ => println("其他类型") }
}
}

6、异常处理

package top.ruandb.scala.Course05

object ExceptionApp {

  def main(args: Array[String]): Unit = {
try{
val i = 100/0 //ArithmeticException
println(i)
}catch {
case e:ArithmeticException => println("分母不能为0")
case e:Exception => println(e.getMessage)
}finally {
println("用于释放资源,一定能执行")
}
}
}

7、class模式匹配

package top.ruandb.scala.Course05

import scala.util.Random

object MatchApp {

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

    caseClassMatch(Cto("lucy","99"))
caseClassMatch(Employee("jack","7"))
caseClassMatch(Others("kangkang"))
} def caseClassMatch(person:Person): Unit ={
person match{
case Cto(name,floor) => println("hi,"+name +" "+ floor)
case Employee(name,floor) =>println("hi,"+name +" "+ floor)
case Others(name) => println("hi,"+name )
}
} class Person
case class Cto(name:String,floor:String) extends Person
case class Employee(name:String,floor:String) extends Person
case class Others(name:String) extends Person
}

8、Some,None模式匹配

package top.ruandb.scala.Course05

import scala.util.Random

object MatchApp {

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

    getGrade("lucy")//your grade is A
getGrade("jack")//your grade is B
getGrade("kangkang")//without your score } val grades = Map("lucy"->"A","jack"->"B")
def getGrade(name:String): Unit ={
val grade = grades.get(name)
grade match{
case Some(grade) => println("your grade is "+ grade)
case None =>println("without your score")
}
}
}

Scala学习——模式匹配的更多相关文章

  1. Scala学习教程笔记三之函数式编程、集合操作、模式匹配、类型参数、隐式转换、Actor、

    1:Scala和Java的对比: 1.1:Scala中的函数是Java中完全没有的概念.因为Java是完全面向对象的编程语言,没有任何面向过程编程语言的特性,因此Java中的一等公民是类和对象,而且只 ...

  2. Scala 学习之路(十一)—— 模式匹配

    一.模式匹配 Scala支持模式匹配机制,可以代替swith语句.执行类型检查.以及支持析构表达式等. 1.1 更好的swith Scala不支持swith,可以使用模式匹配match...case语 ...

  3. scala学习之路一

    所谓学习,那么首先就先简单介绍一下scala吧 1.scala的介绍 Scala 是一门多范式(multi-paradigm)的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性. Scal ...

  4. Scala学习资源

    Scala学习资源: Scala官方网站:http://www.scala-lang.org/ Scala github:https://github.com/scala/scala Twitter ...

  5. 【Todo】【读书笔记】大数据Spark企业级实战版 & Scala学习

    下了这本<大数据Spark企业级实战版>, 另外还有一本<Spark大数据处理:技术.应用与性能优化(全)> 先看前一篇. 根据书里的前言里面,对于阅读顺序的建议.先看最后的S ...

  6. 机器学习(三)--- scala学习笔记

    Scala是一门多范式的编程语言,一种类似Java的编程语言,设计初衷是实现可伸缩的语言.并集成面向对象编程和函数式编程的各种特性. Spark是UC Berkeley AMP lab所开源的类Had ...

  7. 【Scala】Scala学习资料

    Scala学习资料 java 树形 分类器_百度搜索 决策树分类器-Java实现 - CSDN博客 KNN分类器-Java实现 - CSDN博客 学习:java设计模式—分类 - 飞翔荷兰人 - 博客 ...

  8. Scala学习网址

    scala学习网址为:https://twitter.github.io/scala_school/zh_cn https://www.zhihu.com/question/26707124

  9. Spark之Scala学习

    1. Scala集合学习: http://blog.csdn.net/lyrebing/article/details/20362227 2. scala实现kmeans算法 http://www.t ...

随机推荐

  1. TVM源码框架安装方法

    TVM源码框架安装方法 本文提供如何在各种系统上从零构建和安装TVM包的说明.它包括两个步骤: 首先从C++代码中构建共享库(linux的libtvm.so,macOS的libtvm.dylib和wi ...

  2. ADAS处理器集成功能安全单片机MCU

    ADAS处理器集成功能安全单片机MCU ADAS processors integrate functional safety MCU 拉斯维加斯-德州仪器公司引进了ADAS和网关处理器TDA4VM和 ...

  3. Samsung WLAN AP RCE漏洞及利用工具

    1.漏洞详情: 三星 WLAN AP WEA453e 路由器 远程命令执行 2.fofa语句 title=="Samsung WLAN AP" 3.复现 payload: POST ...

  4. ieda引入jstl后报错解决办法

    报错如下: HTTP Status 500 - The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved in ei ...

  5. 工具篇:介绍几个好用的guava工具类

    前言 平时我们都会封装一些处理缓存或其他的小工具.但每个人都封装一次,重复造轮子,有点费时间.有没有一些好的工具库推荐-guava.guava是谷歌基于java封装好的开源库,它的性能.实用性,比我们 ...

  6. Django(67)drf搜索过滤和排序过滤

    前言 当我们需要对后台的数据进行过滤的时候,drf有两种,搜索过滤和排序过滤. 搜索过滤:比如我们想返回sex=1的,那么我们就可以从所有数据中进行筛选 排序过滤:比如我们想对价格进行升序排列,就可以 ...

  7. 解Bug之路-ZooKeeper集群拒绝服务

    解Bug之路-ZooKeeper集群拒绝服务 前言 ZooKeeper作为dubbo的注册中心,可谓是重中之重,线上ZK的任何风吹草动都会牵动心弦.最近笔者就碰到线上ZK Leader宕机后,选主无法 ...

  8. csp-s模拟测试57(10.2)「天空龙」·「巨神兵」·「太阳神」

    题目是古埃及神话??? A. 天空龙 傻逼模拟,看来没有滑天下之大稽QAQ,也没有打错快读(大雾...) B. 巨神兵 难度爆增,一脸懵比..... 60分状压: 因为是求有向图,关于有向图好像拓扑用 ...

  9. 删除主键时报错ORA-00955

    一.利用已有索引创建主键1.建表GAO@PROD> create table abcd(id number(10),name1 varchar2(20)); Table created. 2.插 ...

  10. Ubuntu安装ibmmq

    一.前言 安装整个ibmmq的过程中,真的气炸了,在网上搜索到的答案千篇一律,一个安装部署文档居然没有链接地址:为了找到这个开发版本的下载地址找了一下午,不容易啊.也提醒了自己写博文还是得有责任心,把 ...