本篇作为scala快速入门系列的第二十九篇博客,为大家带来的是关于模式匹配的内容。
模式匹配
scala中有一个非常强大的模式匹配机制,可以应用在很多场景:
- switch语句
- 类型查询
- 使用模式匹配快速获取数据
简单模式匹配
在Java中,有switch关键字,可以简化if条件判断语句。在scala中,可以使用match表达式替代。
语法
示例
- 从控制台输入一个单词(使用StdIn.readLine方法)
- 判断该单词是否能够匹配以下单词,如果能匹配,返回一句话
- 打印这句话
参考代码
匹配类型
除了像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类型,敬请期待٩(๑>◡<๑)۶