Scala函数式编程特性一:函数赋值给变量
- 把函数赋值给变量,函数名+空格+_
//首先有一个函数def fun(A:String){...}//把函数赋值给变量,空格+_即可val A = fun _//以后就可以直接用变量名代替函数名A("abc")
Scala函数式编程特性二:匿名函数
- 匿名函数:(参数名:参数类型)=>函数体
val funname = (A:String)=> println(A)
Scala函数式编程特性三:高阶函数
- 高阶函数:把函数作为参数传给另一个函数
- 定义高阶函数时,高阶函数的参数列表中:
- 要写清楚传入函数的参数,当前函数名:(源函数参数)=>源函数返回值类型
- 还要写源函数参数,源函数参数:源函数参数类型 ```scala val funA = (A:String)=> println(A) //定义匿名函数 def funB(fun:(String)=>Unit,name:String){ fun(name) //在高阶函数中调用函数 } //定义高阶函数
//两种方法调用高阶函数 funB(funA,”hello”)//第一种:直接传函数名调用高阶函数 funB((A:String)=> println(A),”hello”) //第二种:直接传整个匿名函数调用高阶函数
对于匿名函数调用的方法还可以简写: funB((A)=>println(A),”hello”) 当只有一个参数时还可以 funB(A=>println(A),”hello”)
---
<a name="Q9Bq0"></a>
## 常用的一些高阶函数的使用
- **Map:对集合中每个元素都应用一个函数,返回应用后的元素列表**
```scala
//例如把数组全部元素*2
Array(1,2,3,4,5).map(num=>num*2) 在map高阶函数中传入匿名函数
//也可以简写成
Array(1,2,3,4,5).map(_ * 2)
flatMap:首先对每个元素执行Map,但是会把每个元素执行的结果再合并成一个大集合并返回
//例如把字符串数组中的字符串按照空格切开 Array("hello you","hello me").flatMap(line=>line.split(" ")) //也可以简写成 Array("hello you","hello me").flatMap(_.split(" "))foreach:迭代的意思
//例如输出数组每个元素 Array(1,2,3).foreach(A=>println(A)) //也可以简写成 Array(1,2,3).foreach(println(_))filter:按照函数进行过滤操作
//例如过滤出数组中的偶数 Array(1,2,3,4,5).filter(A => A % 2 == 0) //也可以简写成 Array(1,2,3,4,5).filter(_ % 2 == 0)reduceLeft:按照函数从左往右的两两元素进行操作,例如累加、求最大值等
//求数组的和 Array(1,2,3).reduceLeft((A,B)=>A+B) //也可以简写成 Array(1,2,3,4,5).reduceLeft(_+_)
