遍历终于来到函数式编程了,跟着我的节奏一起冲冲冲
foreach的图解
使用foreach遍历集合
var list = List(1,2,3,4) 对list进行遍历 list.foreach(println(_))
上面式简略的形式,其实是这样的
- 正常的格式
list.foreach((x : Int) => {println(x})
2.省略参数类型
list.foreach((x) => {println(x})
3.使用下划线来代替x
list.foreach(println(_))
map
集合的映射是指将一种数据类型转换成其它的数据类型
有下面的列表
List(1,2,3,4)
将里面的数据变成原来的2倍
val list = List(1,2,3,4) println(list.map(_*2))扁平化映射
扁平化映射可以理解为先map,然后再flatten。
下面通过一个例子展示一下flatmap
有一个包含了若干个文本行的列表:"hadoop hive spark flink flume", "kudu hbase sqoop
storm"
val list1 = List("hadoop hive spark flink flume", "kudu hbase sqoop storm") list1.flatMap(_.split(" "))
根据空格拆分,将原本的
List("hadoop hive spark flink flume")
变成下面的模样
hadoop hive spark flink flume
Fliter过滤筛选出符合条件的元素
1 2 3 4 5 6 7 8 9 筛选出来式偶数的数字
val list = (1 to 9 ).toList val list2 = list.fliter(_ % 2 == 0)
如果模2的余数是0,那么这个数就是偶数
排序- sorted 用来对集合元素进行默认排序sortBy 用来对集合按照指定字段排序sortWith 用来对集合进行自定义排序
sorted默认排序
对列表元素按照升序进行排序,怎么实现降序呢?升序之后用reverse就可以
val list = List(1,2,3,4) val list2 = list.sorted 升序的结果 1,2,3,4
sortBy指定字段排序
对列表元素根据传入的函数转换后,进行排序
1. 有一个列表,分别包含几下文本行:"01 hadoop", "02 flflume", "03 hive", "04 spark"
2. 请按照单词字母进行排序
val list1 = List("01 hadoop", "02 flume", "03 hive", "04 spark") //根据单词字母进行排序,需要找到单词字母 val list2 = list1.sortBy(_.split(" ")(1)) list1.sortBy(_.split(" ")(1))
先对列表中的每一个元素按照空格进行拆分,拆分之后就是 01 hadoop
然后(1)取第二个元素。 第二个元素就是hadoop
自定义排序按照自定义函数来进行排序
对 2,3,1,6,4,5进行排序
val list = List(2,3,1,6,4,5) //定义排序的方式 val list2 = list.sortWith(_ > _)
什么是 SortWith(_>_)
> 按照降序排序
分组分组指的是指将数据按照指定条件进行分组
下面看分组的图解
1. 有一个列表,包含了学生的姓名和性别: "刘德华" -> "男", "刘亦菲" -> "女", "胡歌" -> "男,按照性别进行分组
val list1 = List("刘德华" -> "男", "刘亦菲" -> "女", "胡歌" -> "男") //按照性别分组 val list2 = list1.groupBy(_._2) //统计不同性别的人数 val list3 = list2.map(x => x._1 -> x._2.size)
解释一下
"刘德华" -> ”男“
打印的时候是 (刘德华,男) 元组类型
所以可以用 ._1 ._2
总结终于把Scala中的自带的数据结构啃完了
下面就是一些语法糖了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)