Scala之函数式编程(1)

简介: 在大数据领域Spark/Flink的大量业务代码都会使用到函数式编程,所以这一部分很重点哦!!

  • 就下面几种方法嘛 ~~~~
  1. 遍历(foreach)
  2. 映射(map)
  3. 映射扁平化(flatmap)
  4. 过滤(filter)
  5. 是否存在(exists)
  6. 排序(sorted、sortBy、sortWith)
  7. 分组(groupBy)
  8. 聚合计算(reduce)
  9. 折叠(fold)

解释: 在Scala中 _ 属于通配符

1. 遍历 foreach

  • scala的函数式编程,使用foreach方法来进行遍历、迭代。它可以让代码更加简洁。
方法:
集合对象.foreach(f: (A)Unit): Unit

例子:
// 定义一个列表
scala> val a = List(1,2,3,4)
a: List[Int] = List(1, 2, 3, 4)// 迭代打印
scala> a.foreach((x:Int)=>println(x))  //复杂了

//优化 省略参数
scala> a.foreach(x => println(x))
18000
20000
22000

//在优化 下划线代替(用的很多)
当函数参数,只在函数体中出现一次,而且函数体没有嵌套调用时,可以使用下划线来简化函数定义
scala> a.foreach(println(_))
18000
20000
22000

过程:
在这里插入图片描述

2. 映射 Map

简介: 此部分做大数据用的最多,所以必须掌握哦

  • map方法接收一个函数,将这个函数应用到每一个元素,返回一个新的集合
    在这里插入图片描述
用法:
def map[B](f: (A) ⇒ B): TraversableOnce[B]

在这里插入图片描述
在这里插入图片描述

例子    将List列表中的全部 +1:
scala> val a = List(1,2,3,4)    //定义一个列表
a: List[Int] = List(1, 2, 3, 4)

//方法1
scala> a.map(x => x+1)   //全部+1
res34: List[Int] = List(2, 3, 4, 5)//方法2   参数就一个  _ 代替  用的多
scala> a.map(_ + 1)

3. 扁平化映射 | flatMap (用的也很多)

  • flatMap,可以理解为先map,然后再flatten
  • map是将列表中的元素转换为一个Array
  • flatten再将整个列表进行扁平化
    在这里插入图片描述
方法签名
def flatMap[B](f: (A) ⇒ GenTraversableOnce[B]): TraversableOnce[B]

在这里插入图片描述

例子:
在这里插入图片描述

例子: 
1.有一个包含了若干个文本行的列表:"hadoop hive spark flink flume", "kudu hbase sqoop storm"
2.获取到文本行中的每一个单词,并将每一个单词都放到列表中

步骤
1.使用map将文本行拆分成数组
2.再对数组进行扁平化
3.使用flatMap简化操作

// 定义文本行列表
scala> val a = List("hadoop hive spark flink flume", "kudu hbase sqoop storm")
a: List[String] = List(hadoop hive spark flink flume, kudu hbase sqoop storm)// 使用map将文本行转换为单词数组
scala> a.map(x=>x.split(" "))
res5: List[Array[String]] = List(Array(hadoop, hive, spark, flink, flume), Array(kudu, hbase, sqoop, storm))// 扁平化,将数组中的
scala> a.map(x=>x.split(" ")).flatten
res6: List[String] = List(hadoop, hive, spark, flink, flume, kudu, hbase, sqoop, storm)

// 使用flatMap简化操作   用的最多  _ 通配符代替参数
scala> a.flatMap(_.split(" "))
res7: List[String] = List(hadoop, hive, spark, flink, flume, kudu, hbase, sqoop, storm)

4.过滤 | filter

  • 过滤符合一定条件的元素
    在这里插入图片描述
    在这里插入图片描述
例子: 过滤掉奇数
scala> List(1,2,3,4,6,5,7,89,78,5,66,55).filter(_ % 2 == 0)
res39: List[Int] = List(2, 4, 6, 78, 66)

猜你喜欢

转载自blog.csdn.net/m0_49834705/article/details/112687370