大数据Scala学习—列表、 集与映射
跟我一起来学习Scala函数式编程:
采用 foreach 来遍历集合, 可以让代码看起来更简洁, 更优雅.
格式
说明
执行过程
需求
有一个列表,包含以下元素1,2,3,4,请使用foreach方法遍历打印每个元素
参考代码
概述
上述案例函数定义有点啰嗦,我们有更简洁的写法。可以通过如下两种方式来简化函数定义:
解释:
因为使用foreach来迭代列表,而列表中的每个元素类型是确定的, 所以我们可以通过 类型推断 让Scala 程序来自动推断出来集合中每个元素参数的类型, 即: 在我们创建函数时,可以省略其参数列表的类型.
解释:
当函数参数,只在函数体中出现一次,而且函数体没有嵌套调用时,可以使用下划线来简化函数定义.
示例
1. 有一个列表,包含元素1,2,3,4,请使用foreach方法遍历打印每个元素.
2. 使用类型推断来简化函数定义.
3. 使用下划线来简化函数定义
参考代码
集合的映射操作是指 将一种数据类型转换为另外一种数据类型的过程 , 它是在进行数据计算的时候, 甚至将来在编写 Spark/Flink程序时用得最多的操作,也是我们必须要掌握的.
例如: 把List[Int]转换成List[String].
格式
说明
执行过程
需求
参考代码
扁平化映射可以理解为先map,然后再flflatten, 它也是将来用得非常多的操作,也是必须要掌握的, 如图:
解释:
1. map是将列表中的 元素转换为一个List
2. flflatten再将整个列表进行扁平化
格式
说明
示例
需求
思路分析
参考代码
过滤指的是 过滤出(筛选出)符合一定条件的元素 .
格式
说明
执行过程
案例
1. 有一个数字列表,元素为:1,2,3,4,5,6,7,8,9
2. 请过滤出所有的偶数
参考代码
在scala集合中,可以使用以下三种方式来进行排序
7.6.1 默认排序(sorted)
所谓的默认排序指的是 对列表元素按照升序进行排列 . 如果需要降序排列, 则升序后, 再通过 reverse 实现.
需求
1. 定义一个列表,包含以下元素: 3, 1, 2, 9, 7
2. 对列表进行升序排序
3. 对列表进行降序排列.
参考代码
7.6.2 指定字段排序(sortBy)
所谓的指定字段排序是指 对列表元素根据传入的函数转换后,再进行排序 .
例如: 根据列表List("01 hadoop", "02 flflume")的 字母进行排序.
格式
说明
示例
参考代码
7.6.3 自定义排序(sortWith)
所谓的自定义排序指的是 根据一个自定义的函数(规则)来进行排序 .
格式
说明
示例
1. 有一个列表,包含以下元素:2,3,1,6,4,5
2. 使用sortWith对列表进行降序排序
参考代码
分组指的是 将数据按照指定条件进行分组 , 从而方便我们对数据进行统计分析.
格式
说明
执行过程
需求
参考代码
所谓的聚合操作指的是 将一个列表中的数据合并为一个 . 这种操作经常用来统计分析中. 常用的聚合操作主要有两个:
7.8.1 聚合(reduce)
reduce表示将列表传入一个函数进行聚合计算.
格式
说明
执行过程
注意:
reduce和reduceLeft效果一致,表示从左到右计算
reduceRight表示从右到左计算
需求
1. 定义一个列表,包含以下元素:1,2,3,4,5,6,7,8,9,10
2. 使用reduce计算所有元素的和
参考代码
7.8.2 折叠(fold)
fold与reduce很像,只不过多了一个指定初始值参数.
格式
说明
注意事项:
fold和foldLet效果一致,表示从左往右计算
foldRight表示从右往左计算
需求
1. 定义一个列表,包含以下元素:1,2,3,4,5,6,7,8,9,10
2. 假设初始化值是100, 使用fold方法计算所有元素的和.
参考代码