zoukankan      html  css  js  c++  java
  • 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)

       8.聚合 reduce,reduceLeft,reduceRight

        格式:集合.reduce(op:(A1,A2)=>A1)

          A1:截止当前位置的聚合结果

          A2:当前需要聚合的元素

     1     var a = List(1, 2, 3)
     2     var b = a.reduce((x, y) => x + y)
     3     println(b)
     4     //6
     5     var c = a.reduce(_ + _)
     6     println(c)
     7     //6
     8 
     9     var d = a.reduceLeft(_ - _)
    10     var e = a.reduceRight(_ - _)
    11     println(d)
    12     println(e)
    13     //-4
    14     //2

      注意:reduceLeft reduceRight 的区别

    9.折叠 fold(相较于聚合,多了一个初始值)

        格式:集合.fold(初始值)(op:(A1,A2)=>A1)  #A1,A2 与聚合含义相同

    1     var a = List(1, 2, 3)
    2     var b = a.fold(10)(_ - _)
    3     var c = a.foldRight(10)(_ - _)
    4     println(b)
    5     println(c)
    6     //4
    7     //-8
  • 相关阅读:
    冲刺阶段站立会议每天任务7
    冲刺阶段站立会议每天任务6
    冲刺阶段站立会议每天任务5
    冲刺阶段站立会议每天任务4
    《梦断代码》读后感一
    第一次冲刺项目总结
    书店促销问题
    用户需求调研报告
    需求分析
    返回二维数组最大子数组的和(2)
  • 原文地址:https://www.cnblogs.com/cmxbky1314/p/12283479.html
Copyright © 2011-2022 走看看