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--第四天的主要内容,如果未能解决你的问题,请参考以下文章

linux打开终端如何启动scala,如何在终端下运行Scala代码片段?

为什么Scala是可扩展的?

代码随想录算法训练营第四天 | 24.两两交换链表

第四天-代码练习

Beta冲刺:第四天

Beta冲刺 第四天