▼Scala系列学习笔记:
- Scala概述与开发环境配置
- Scala基础学习之运算符
- Scala基础学习之for循环和while循环
- 一文掌握scala中的方法和函数
- Scala基础:类和对象、访问修饰符和构造器
- Scala的继承和抽象类
- Scala基础语法之Trait详解
- Scala学习之数组与元组
- 大数据Scala学习—列表、 集与映射
- 理解Scala的函数式编程思想
Scala中有一个非常强大的模式匹配机制,应用也非常广泛, 例如:
- 判断固定值
- 类型查询
- 快速获取数据
1 简单模式匹配
一个模式匹配包含了一系列备选项,每个备选项都开始于关键字 case。且每个备选项都包含了一个模式及一到多个表达式。箭头符号 => 隔开了模式和表达式。
格式
执行流程
1. 先执行第一个case, 看 变量值 和 该case对应的常量值 是否一致.
2. 如果一致, 则执行该case对应的表达式.
3. 如果不一致, 则往后执行下一个case, 看 变量值 和 该case对应的常量值 是否一致.
4. 以此类推, 如果所有的case都不匹配, 则执行 case _ 对应的表达式.
需求
1. 提示用户录入一个单词并接收.
2. 判断该单词是否能够匹配以下单词,如果能匹配,返回一句话
3. 打印结果
参考代码
2 匹配类型
除了匹配数据之外
, match表达式还可以进行类型匹配。如果我们要根据不同的数据类型,来执行不同的逻辑,也 可以使用match表达式来实现。
格式
注意
:
如果
case表达式中无需使用到匹配到的变量,可以使用下划线代代替
需求
1.
定义一个变量为
Any
类型,然后分别给其赋值为
"hadoop"
、
1
、
1.0
2. 定义模式匹配,然后分别打印类型的名称
参考代码
3 守卫
所谓的守卫指的是
在
case
语句中添加
if
条件判断
,
这样可以让我们的代码更简洁
,
更优雅.
格式
需求
1.
从控制台读入一个数字
a
(使用
StdIn.readInt
)
2.
如果
a >= 0
而且
a <= 3
,打印
[0-3]
3.
如果
a >= 4
而且
a <= 8
,打印
[4,8]
4. 否则,打印未匹配
参考代码
4 匹配样例类
Scala
中可以使用模式匹配来匹配样例类,从而实现可以快速获取样例类中的成员数据。后续,我们在开发
Akka案例时,还会经常用到。
格式
注意:
1.
样例类型后的小括号中
,
编写的字段个数要和该样例类的字段个数保持一致
.
2.
通过
match
进行模式匹配的时候
,
要匹配的对象必须声明为
: Any类型
需求
1.
创建两个样例类
Customer(
包含姓名
,
年龄字段
), Order(
包含
id
字段
)
2.
分别定义两个样例类的对象,并指定为
Any
类型
3. 使用模式匹配这两个对象,并分别打印它们的成员变量值
参考代码
5 匹配集合
了上述功能之外
, Scala
中的模式匹配,还能用来匹配数组
,
元组
,
集合
(
列表
,
集
,
映射
)
等。
5.1
示例一
:
匹配数组
需求
1.
依次修改代码定义以下三个数组
2.
使用模式匹配
,
匹配上述数组
.
参考代码
5.2
示例二
:
匹配列表
需求
1.
依次修改代码定义以下三个列表
2. 使用模式匹配, 匹配上述列表.
参考代码
5.3
案例三
:
匹配元组
需求
1.
依次修改代码定义以下两个元组
2.
使用模式匹配
,
匹配上述元组
.
参考代码
6 变量声明中的模式匹配
在定义变量时,可以使用模式匹配快速获取数据
.
例如
:
快速从数组
,
列表中获取数据
.
需求
1.
生成包含
0-10
数字的数组,使用模式匹配分别获取第二个、第三个、第四个元素
2.
生成包含
0-10
数字的列表,使用模式匹配分别获取第一个、第二个元素
参考代码
7 匹配for表达式
Scala
中还可以使用模式匹配来匹配
for
表达式,从而实现快速获取指定数据
,
让我们的代码看起来更简洁
,
更优雅
.
需求
1.
定义变量记录学生的姓名和年龄
,
例如
: "
张三
" -> 23, "
李四
" -> 24, "
王五
" -> 23, "
赵六
" -> 26
2.
获取所有年龄为
23
的学生信息
,
并打印结果
.
参考代码