一、迭代器 iterator
适合Scala中所有集合的遍历
1 var a = List(1, 2, 3, 4)
2 var b = a.iterator
3 //hasNext:判断迭代器是否由下一个元素 next:获取下一个元素
4 while (b.hasNext) {
5 println(b.next)
6 }
7 //结果
8 //1
9 //2
10 //3
11 //4
二、函数式编程
用处:Scala 针对集合的操作,简化代码
1.遍历 froeach
1 //完成写法 foreach 中传的是一个函数 :x代表集合(容器)中的每一个元素
2 //注意:foreach没有返回值 ,即为Unit
3 a.foreach((x: Int) => {
4 println(x)
5 })
6 //简化写法一:省去参数的类型指定 ,scala做类型推断
7 a.foreach(x => println(x))
8 //建议写法二:使用下划线 代替 集合中的每个元素
9 a.foreach(println(_))
2.映射 Map
格式:原始集合.map(f:(A)) #A:代表集合中的每个元素
返回值是一个新的集合
1 var a = List(1, 2, 3, 4) 2 //每个集合中的元素+1 得到新的集合 3 var b = a.map(x => x + 1) 4 println(b) 5 var c = a.map(_ + 1) 6 println(c) 7 //List(2, 3, 4, 5) 8 //List(2, 3, 4, 5)
3.映射扁平化(降维处理) flatmap
格式:原始集合.flatMap(f:(A))
返回值:一个新的集合
1 var a = List("cmx01 cmx02", "cmx03 cmx04")
2 //正常的思路与写法
3 var b = a.map(_.split(" ")).flatten
4 // println(b)
5 //List(cmx01, cmx02, cmx03, cmx04)
6 //flatMap 简化
7 var c = a.flatMap(x => {
8 x.split(" ")
9 })
10 println(c)
11 //List(cmx01, cmx02, cmx03, cmx04)
12 var d = a.flatMap(_.split(" "))
13 println(d)
14 //List(cmx01, cmx02, cmx03, cmx04)
4.过滤 filter 按照一定的规则,对集合中的元素进行过滤
格式:原始集合.filter(p:(A))=>Boolean
返回值:一个新集合
1 var a = List(1, 2, 3, 4, 5, 6, 7)
2 //过滤偶数
3 var b = a.filter(x => {
4 x % 2 == 0
5 })
6 println(b)
7 //过滤奇数,并使用简便的写法
8 var c = a.filter(_ % 2 == 1)
9 println(c)
10 //List(2, 4, 6)
11 //List(1, 3, 5, 7)
5.是否存在 exists
1 var a = List(1, 2, 3, 4, 5, 6, 7) 2 println(a.exists(_==3)) 3 //true
6.排序sorted sortBy sortWith
1 var a = List(9, 6, 4, 3, 5, 2, 1)
2 //默认排序 升序
3 var b = a.sorted
4 println(b)
5 //List(1, 2, 3, 4, 5, 6, 9)
6
7 //根据指定元素进行排序
8 var c = List("cmx 1", "zzz 2", "uuu 3")
9 var d = c.sortBy(_.split(" ")(0))
10 println(d)
11 //List(cmx 1, uuu 3, zzz 2)
12
13 //自定义排序sortWith
14 //降序排列 大于号 降序 小于号 升序
15 var e = a.sortWith(_ > _)
16 println(e)
17 //List(9, 6, 5, 4, 3, 2, 1)
18
19 //注意简写的 _ 不能出现再 if 判断里
20 var f = a.sortWith((x, y) => {
21 if (x < y) true else false
22 })
23 println(f)
24 //List(1, 2, 3, 4, 5, 6, 9)
关于 _ 的小结
1.下划线 不能出现在 if 判断中
2.当函数的参数,只在函数体中出现一次,并且函数体没有嵌套调用
7.分组 groupby
1 var a = List(("cmx", 1), ("cmx01", 1), ("xxx", 0))
2 //需求 分组统计 0,1 的个数
3 var b = a.groupBy(_._2)
4 println(b)
5 //打印的结果为一个Map
6 //Map(1 -> List((cmx,1), (cmx01,1)), 0 -> List((xxx,0)))
7 for (i <- b) println(i)
8 //循环打印的结果却是元组
9 //(1,List((cmx,1), (cmx01,1)))
10 //(0,List((xxx,0)))
11
12 var c = b.map(x => x._1 -> x._2.length)
13 println(c)
14 //Map(1 -> 2, 0 -> 1)
15 c.foreach(println(_))
16 //(1,2)
17 //(0,1)
来源:https://www.cnblogs.com/cmxbky1314/p/12283479.html