Scala--第四天
Posted cmxbky1314
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Scala--第四天相关的知识,希望对你有一定的参考价值。
一、迭代器 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)
以上是关于Scala--第四天的主要内容,如果未能解决你的问题,请参考以下文章