您的位置:首页 > 编程语言

第3课 Scala函数式编程彻底精通及Spark源码阅读笔记

2016-01-04 21:22 477 查看
本课内容:
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)
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: