本课内容:
1:scala中函数式编程彻底详解
2:Spark源码中的scala函数式编程
3:案例和作业
函数式编程开始:
def fun1(name: String){
println(name)
}
//将函数名赋值给一个变量,那么这个变量就是一个函数了。
val fun1_v = fun1_
访问 fun1_v("Scala")
结果:Scala
匿名函数:参数名称用 => 指向函数体
val fun2=(content: String) => println(content)
fun2
高级函数:
一:函数的参数也是函数,如下
def bigData(func: (String) =>Unit,content: String){ //输入参数是String,返回的类型是unit
func(content)
}
bigData(fun1_v,"Spark")
//结果 Spark
二:函数的返回值也是函数
def func_Returned(content: String) = (message: String) => println(content + " "+message)
val returned =func_Returned("Spark")
returned("Scala")
结果:Spark Scala
三:数组中的高级函数
array.map(2*_)
四:函数闭包 函数超出了作用域之后,依然可以访问
def scala(content: String) = (message: String) => println(content + ":" + message)
val funcResult=scala("Spark")
funcResult("Flink")
//结果 Spark : Flink
//柯里化 *****
def sum(x: Int,y: Int) = x+y
转为
def sum_Currying(x: Int) =(y: Int) = x+y
sum_Currying(1)(3)
//结果 4
作业:统计一个文件夹下面所有的单词出现的总次数(应用了函数式编程,集合的知识点)
object HelloScala {
def main(args: Array[String]) {
ScanParseAllFile()
}
def ScanParseAllFile() {
val arrBuffer = ArrayBuffer[String]()
var i = 0;
val files = (new File("D:/wangs/lepus/src/com/huawei/lepus/activity/manager/ats")).listFiles()
for (file <- files) {
if (file.isFile()) {
val f = Source.fromFile(file)
for (line <- f.getLines()) {
//line.split("[,:.!\s?*\/-=+]()><")
for (key <- line.split('.')) {
i += 1;
arrBuffer += key;
}
}
}
for (fileName <- arrBuffer) {
println(fileName)
}
}
}
}