scala快速入门系列【模式匹配】

2021-01-26 15:58:27 浏览数 (1)

本篇作为scala快速入门系列的第二十九篇博客,为大家带来的是关于模式匹配的内容。


模式匹配

scala中有一个非常强大的模式匹配机制,可以应用在很多场景:

  • switch语句
  • 类型查询
  • 使用模式匹配快速获取数据

简单模式匹配

在Java中,有switch关键字,可以简化if条件判断语句。在scala中,可以使用match表达式替代。

语法

示例

  1. 从控制台输入一个单词(使用StdIn.readLine方法)
  2. 判断该单词是否能够匹配以下单词,如果能匹配,返回一句话
  3. 打印这句话

参考代码


匹配类型

除了像Java中的switch匹配数据之外,match表达式还可以进行类型匹配。如果我们要根据不同的数据类型,来执行不同的逻辑,也可以使用match表达式来实现。

定义

示例

  • 定义一个变量为Any类型,然后分别给其赋值为"hadoop"、1、1.0
  • 定义模式匹配,然后分别打印类型的名称

参考代码

【Note】

如果case表达式中无需使用到匹配到的变量,可以使用下划线代代替。


守卫

在Java中,只能简单地添加多个case标签。例如:要匹配0-7,就需要写8个case语句出来。例如:

在scala中,可以使用守卫来简化上述代码——也就是在case语句中添加if条件判断

示例

  • 从控制台读入一个数字a(使用StdIn.readInt)
  • 如果 a >= 0 而且 a <= 3,打印[0-3]
  • 如果 a >= 4 而且 a <= 8,打印[3,8]
  • 否则,打印未匹配

参考代码


匹配样例类

scala可以使用模式匹配来匹配样例类,从而可以快速获取样例类中的成员数据。后续,我们在开发Akka案例时,还会用到。

示例

  • 创建两个样例类Customer、Order – Customer 包含姓名,年龄字段 – Order包含id字段
  • 分别定义两个案例类的对象,并指定为Any类型
  • 使用模式匹配这两个对象,并分别打印它们的成员变量值

参考代码


匹配集合

scala中的模式匹配,还能用来匹配集合。

1.匹配数组

示例

  • 依次修改代码定义以下三个数组
  • 使用模式匹配上述数组

参考代码

2.匹配列表

示例

  • 依次修改代码定义以下三个列表 在这里插入图片描述
  • 使用模式匹配上述列表

参考代码

[NOTE]

  • Nil 表示空列表,tali表示任意
  • 用 List(x,y) 类似的匹配也可以完成上述的需求
3.匹配元组

示例

  • 依次修改代码定义以下两个元组
  • 使用模式匹配上述元素

参考代码


变量声明

在定义变量的时候,可以使用模式匹配获取数据。

示例1 获取数组中的元素

需求

  • 生成包含0-10数字的数组,使用模式匹配分别获取第二个、第三个、第四个元素

参考代码

示例2 获取List中的数据

需求

  • 生成包含0-10数字的列表,使用模式匹配分别获取第一个、第二个元素

参考代码


本期的内容分享就到这里了,喜欢的小伙伴们记得点个赞,持续关注哟~下期为大家介绍的是scala中的Option类型,敬请期待٩(๑>◡<๑)۶

0 人点赞