将Scala剩下的函数式编程进行学习
函数式编程
函数字面量
123:整数自变量
1.23 浮点数自变量
'A' 字符自变量
...
函数自变量:定义一个变量一般去定义一个函数,使得函数也像其他自变量一般有了值,同样拥有类型和值
函数的类型和值
示例:
def counter(value: Int): Int = { value += 1 //示例,会报错 }
类型:
输入参数:Int
输出参数:Int
表示为:(Int) => Int
值:去掉函数声明
(value) => { value += 1}
用声明变量的方法去声明:
// 输入类型 输出类型 函数的值 val counter: Int => Int = {(value) => value += 1}
匿名函数:Lambda表达式
//(参数) => 表达式 (num: Int) => num * 2
把匿名函数存在变量里
scala> val myNumFunc: Int => Int = (num: Int) => num * 2 val myNumFunc: Int => Int = $Lambda$1066/0x000002a890534418@33f349ae scala> println(myNumFunc(3)) 6
scala语可以进行推断值,可以简写为以下的方式
scala> val myNumFunc1 = (num: Int) => num * 2 val myNumFunc1: Int => Int = $Lambda$1084/0x000002a89053ce40@11c25846 scala> println(myNumFunc1(3)) 6 scala> scala> val myNumFunc2: Int => Int = (num) => num * 2 val myNumFunc2: Int => Int = $Lambda$1085/0x000002a89053f818@4b7a4c83 scala> println(myNumFunc2(3)) 6 scala>
但如果省略到无法进行推断,那就进行报错
闭包
val addMore = (x:Int) => x + more
本质:函数内部调用函数外部的一些值,并且可以在函数外部改变函数的值
占位符语法
用下划线"_"作为一个或多个参数占位符
针对集合的操作
遍历操作:
val list = List(1,2,3,4,5) // for进行遍历 for(elem <- list){ println(elem) } // foreach进行遍历 list.foreach(elem =>{ println(elem) })
....
map操作和flatMap操作
map操作是针对于集合的典型变换操作,进行依次变换
scala> val book = List("Hadoop","Hive","HDFS") val book: List[String] = List(Hadoop, Hive, HDFS) scala> book.map(s => s.toUpperCase) val res3: List[String] = List(HADOOP, HIVE, HDFS)
进行依次变换,将book的每一个元素进行取出来,然后进行变换,再进行存储
flatMap:将多个集合挤压为一个字符
scala> val books = List("Hadoop","Hive","HDFS") val books: List[String] = List(Hadoop, Hive, HDFS) scala> books flatMap(s => s.toList) val res0: List[Char] = List(H, a, d, o, o, p, H, i, v, e, H, D, F, S) scala>
首先,先进行tolist操作:
在进行挤压:
filter操作
进行过滤操作
reduce操作
对集合元素进行归约
reduceLeft 从头部开始操作
reduceRight 从尾部开始操作