Scala学习(6)——集合之高阶函数

//可以使用Range,to,until创建list集合
    val list: List[Int] = Range(1,10).toList
    println(list.mkString("\t"))

    /**
      * final def map[B]( f: (A) ⇒ B): List[B]
      * map():f:(A) => B
      * 这里的函数map是list的一个方法,等价于MapReduce的map
      * 将集合中的每个元素取出 传递供给函数f进行调用,返回结果
      * 这里可以是map的数据清洗
      */

    //--------完整写法
    val mapList: List[Int] = list.map(value => {
      value * 2
    })
    //简写
    val mapList1: List[Int] = list.map(_ * 2)
    println(mapList1.mkString(","))

    //上面两行代码的简写
    println(list.map(_ * 2).mkString(","))

    //例如:分隔单词
    val lineList = List(
      "hadoop hive sqoop flume scala",
      "spark redis mongoDB azkaban",
      "zookeeper kafka nginx Hbase"
    )

    val linesWords: List[Array[String]] = lineList.map(line => line.split(" "))
    //遍历输出:List[Array[String]],
    // 由于list里中还存着一个Array,因此需要嵌套循环遍历
    println("------------")
    linesWords.foreach(line => {
      line.foreach(word => print(word +"\t"))
      println()
    })

    /**
      * 压平,将多行内容按规则分割后放到一行
      * final def flatMap[B](f: (A) ⇒ GenTraversableOnce[B]): List[B]
      */
    val lineWords = lineList.flatMap(_.split(" "))
    lineWords.foreach(word => print(word + "\t"))

    println()

    /**
      * 过滤,数据过滤,可以自定义过滤规则
      * def filter(p: (A) ⇒ Boolean): TraversableOnce[A]
      * 返回true则保留,返回false则过滤
      */
    val filterList: List[Int] = list.filter((value) => if(value % 2 == 0) true else false)
    //上一行代码的简写
    val filterList1: List[Int] = list.filter(_ % 2 == 0)
    println(filterList.mkString(","))

    /**
      * 分组,可指定分组条件,
      * 返回的是map(key-value)
      * Map[Int, List[Int]],
      * key和value的类型scala可以推断,也可自己写
      * def groupBy[K](f: (A) ⇒ K): Map[K, List[A]]
      */
    val groupMap: Map[Int, List[Int]] = list.groupBy(_ % 2)
    groupMap.foreach(println)

    /**
      * 排序
      * sorted
      *   默认情况下,依据集合list中的元素,自然排序规则 进行 升序排序
      * sortBy
      *   指定元素排序规则
      * sortWith
      *   主要针对集合中元素,如果 复杂的数据类型,指定排序规则
      */
    val list1 = List[Int](1,5,2,7,45,53,9,16)
    //sorted:默认排序方式是升序,如果是字符串,按字典顺序排序
    println(list1.sorted)

    //降序排列,item => - item
    println(list1.sortBy(-_).mkString(","))

    // def sortWith(lt: (A, A) => Boolean)
    // 类比java中的compareTo
    println(list1.sortWith(_>_).mkString(","))  //降序
    println(list1.sortWith(_<_).mkString(","))  //降序

    /**
      * def reduce( op: (A1, A1) => A1 ): A1 = reduceLeft(op)
      */
    //reduce是reduceLeft,第一次取list中的第一和第二个
    //之后x2循环往右取,x1作为 临时变量
    println("-----------reduce(reduceLeft)------------")
    list1.reduce((x1,x2) => {
      println(s"x1:$x1  x2:$x2")
      x1 + x2
    })

    //与reduceLeft相反,第一次取最后两个,
    // 之后x2作为 临时变量,x1循环往左取
    println("-----------reduceRight------------")
    list1.reduceRight((x1,x2) => {
      println(s"x1:$x1  x2:$x2")
      x1 + x2
    })

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值