Scala函数式编程学习,简单案例

函数式编程

  • 所谓的函数式编程指定的式 方法的参数列表可以接收函数对象
  • 例如:add(10,20)就不是函数式编程,add(函数对象) 这种格式就叫做函数式编程
  • 我们将来编写Spark/Flink大量业务代码时,都会使用到函数式编程。下面的这些操作式学习的重点
函数名功能
foreach遍历集合
map对集合进行转换
flatmap进行扁平化操作
filtter过滤出指定的集合
sorted对集合元素按照默认排序
sortBy按照指定字段排序
sortWith自定义排序
groupBy按照指定条件分组
reduce聚合操作
fold折叠计算
foreach

案例代码

  def main(args: Array[String]): Unit = {
    // 定义一个列表
    val list1 = List(1,2,3,4)
    // 遍历每个元素,并且对每个元素进行操作,x为遍历的每个元素
    list1.foreach( (x:Int) => println(x))

    list1.foreach(x => println(x))

    list1.foreach(println(_))
  }
映射(map)

案例代码

  def main(args: Array[String]): Unit = {
    val list1 = List(1,2,3,4)
    val test = list1.map((x:Int) => { //x=>(1,2,3,4) 遍历x
      "*" * x
    })      //(1,2,3,4) =>(*,**,***,****)
    // 类型推断
    val test1 = list1.map(a => "*" * a)
    // 下划线
    val test2 = list1.map("*" * _)

    for (elem <- test) println(elem)
  }
扁平化映射(flatMap)

先map然后再flatten

案例代码

  def main(args: Array[String]): Unit = {
    // 将列表 “hadoop hive spark flink flume”,"kafka hbase sqoop storm"
    // 转换成单独的单词,并且放到一个list中
    val list = List("hadoop hive spark flink flume", "kafka hbase sqoop storm")
    val test = list.flatMap((x:String)=>{
      x.split(' ')
    })
    println(list)
    print(test)
  }
过滤(filter)

案例代码

  def main(args: Array[String]): Unit = {
    // 过滤数字列表中的偶数:
    // List(1,2,3,4,5,6,7,8,9)
    val list1 = List(1,2,3,4,5,6,7,8,9)
    val list2 = list1.filter(_%2!=0)
    println(list2)
  }
排序
1. 默认排序(sorted)

案例代码

  def main(args: Array[String]): Unit = {
    // 定义一个列表,包含以下元素:3,1,2,9,7
    // 2.对列表进行升序排序
    // 3.对列表进行降序排序
    val list = List(3,1,2,9,7,15)
    // 默认升序排列
    val upSort = list.sorted
    println(upSort)
    // 降序:将升序后的列表倒序就是降序
    val downSort = list.sorted.reverse
    println(downSort)
  }
2. 指定字段排序

案例代码

  def main(args: Array[String]): Unit = {
    //根据列表List("01 hadoop","02 flume","03 kafka","04 redis")
    val list = List("01 hadoop","02 flume","03 kafka","04 redis")
    val test = list.sortBy((x:String)=>{
      // 将字符串切割成不同的字段
      val dd = x.split(' ')
      // 按照第二个字段排序
      dd(1)
    })
    println(test)
  }
3. 自定义排序规则

案例代码

  def main(args: Array[String]): Unit = {
    // 对List(12,3,4,1,6,8,7)进行降序排序
    val list = List(12,3,4,1,6,8,7)
    val test = list.sortWith((x,y) => {
      // 降序
      x > y
      // 升序
      // x < y
    })
    println(test)
  }
分组

案例代码

  def main(args: Array[String]): Unit = {
    val list = List("胡歌"->"男", "杨幂" -> "女","吴彦祖" -> "男","胡歌" -> "男")
    // 按性别分组
    val test = list.groupBy(x => x._2) 
      // 结果为Map('男'->list("胡歌"->"男","吴彦祖" -> "男","胡歌" -> "男"),‘女’->list( "杨幂" -> "女",))
    println(test)
    // 统计人数
    val mapDd = test.map(x => (x._1,x._2.size))
    println(mapDd)
  }
聚合操作
1. reduce

案例代码

  def main(args: Array[String]): Unit = {
    // 定义一个列表,包含:1,2,3,4,8,5,6,7,9,10
    // 计算列表的和
    val list = List(1,2,3,4,8,5,6,7,9,10)
    val sum = list.reduce(_ + _)
    // list.reduce((a,b) => { a + b })
    println(sum)
  }

案例

  1. 定义列表:记录学生的成绩,格式为:姓名,语文成绩,数学成绩,英语成绩,学生信息如下:(“张三”,37,90,100),(“李四”,90,71,81),(“赵六”,59,21,72),(“田七”,100,100,100),(“赵甲第”,98,99,83)
  2. 获取所有语文成绩在60分及以上的同学信息
  3. 获取所有学生的总成绩
  4. 按照总成绩降序排列
  5. 打印结果
  def main(args: Array[String]): Unit = {
    //1. 定义列表:记录学生的成绩,格式为:姓名,语文成绩,数学成绩,英语成绩,学生信息如下:("张三",37,90,100),("李四",90,71,81),("赵六",59,21,72),("田七",100,100,100),("赵甲第",98,99,83)
    val info = List(("张三",37,90,100),("李四",90,71,81),("赵六",59,21,72),("田七",100,100,100),("赵甲第",98,99,83))
    //2. 获取所有语文成绩在60分及以上的同学信息
    val chinese = info.filter(x => {
      x._2 >= 60
    })
    println("语文及格:"+chinese)
    //3. 获取所有学生的总成绩
    val sum = info.map(x => {
      val all = x._2 + x._3 + x._4
      (x._1 , x._2 , x._3 , x._4 , all)
    })
    println("成绩总和:"+sum)
    //4. 按照总成绩降序排列
    val sort1 = sum.sortWith((_._5 > _._5))
    println("降序排序:"+sort1)

  }
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第1章,“可伸展的语言”,给出了Scala的设计,和它后面的理由,历史的概要。 第2章,“Scala的第一步”,展示给你如何使用Scala完成若干种基本编程任务,而不牵涉过多关于如何工作的细节。本章的目的是让你的手指开始敲击并执行Scala代码。 第3章,“Scala的下一步”,演示更多的基本编程任务来帮助你更快速地上手Scala。本章之后,你将能够开始在简单的脚本任务中使用Scala。 第4章,“类和对象”,通过描述面向对象语言的基本建设模块和如何编译及运行Scala程序的教程开始有深度地覆盖Scala语言。 第5章,“基本类型和操作”,覆盖了Scala的基本类型,它们的文本,你可以执行的操作,优先级和关联性是如何工作的,还有什么是富包装器。 第6章,“函数式对象”,进入了Scala面向对象特征的更深层次,使用函数式(即,不可变)分数作为例子。 第7章,“内建控制结构”,显示了如何使用Scala的内建控制结构,如,if,while,for,try和match。 第8章,“函数和闭包”,深度讨论了函数式语言的基础建设模块,函数。 ...... 第31章,“组合子解析”,显示了如何使用Scala的解析器组合子库来创建解析器。 第32章,“GUI编程”,展示了使用Scala库简化基于Swing的GUI编程的快速旅程。 第33章,“SCell电子表”,通过展示一个完整的电子表的实现,集中演示了Scala的一切。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值