1、 匿名函数
package com.dt.scala.hello
object FunctionOps{
def main(args:Array[String]){
var increase=(x:Int)=>x+1//匿名函数def increase(x:Int)=x+1
println(increase(10))//11
val someNumbers=List(-11,-10,-5,0,5,10)
someNumbers.foreach((x:Int)=>print(x))//for循环依次输出list列表中的元素
println
someNumbers.filter((x:Int)=>x>0)foreach((x:Int)=>print(x))//输出大于0的元素,或(x)=>x>0,x=>x>0,_>0
var f=(_:Int)+(_:Int)
println(f(5,10))
}
}
2、偏应用函数
Partially Applied Function 偏应用函数/部分应用函数
def sum(a:Int,b:Int,c:Int)=a+b+c
val fp_a=sum_//sum_偏应用函数
val fp_b=sum(1,_:Int,3)
fp_b(2)//6
fp_b.apply(10)//14
val data=List(1,2,3,4,5,6)
data.foreach(println_)//data.foreach(println)
3、 SAM转换
Single Abstract Method 单一抽象方法
要某个函数做某件事,可以传递另一个函数参数给这个函数
package com.dt.scala.function
import java.awt.Event._
import javax.swing.JFrame
import javax.swing.JButton
import java.awt.event.ActionEvent
import java.awt.event.ActionListener
object SAM {
def main(args:Array[String])
{
var data=0
var frame=new JFrame("SAM tesing");
val jButton=new JButton("Counter")
implicit def convertedAction(action:(ActionEvent)=>Unit)=
new ActionListener{
override def actionPerformed(event:ActionEvent)={
action(event)
}
}
jButton.addActionListener((event:ActionEvent)=>{data+=1;println(data)})
frame.setContentPane(jButton);
frame.pack();
frame.setVisible(true);
}
}
4、curring函数
def multiple(x:Int,y:Int)=x*y//普通函数
def multipleOne(x:Int)=(y:Int)=>x*y//curing函数,各传入一个参数
println(curing(10)(6))//60
5、高阶函数
接受一个或多个函数作输入,输出一个函数。高等函数至少满足一个条件
1、 map函数
定义一个转换,将转换遍历应用到列表的每个元素,返回一个新列表集,
(1 to 9).map(“*” *_).foreach(println_)
输出为
*
**
***
****
*****
******
*******
********
*********
2、filter函数
保留列表中符合条件的列表元素
(1 to 9).filter(_%2==0).foreach(println)
输出为
2
4
6
8
3、reduceLeft函数
从列表的左边往右边应用reduce函数
println((1 to 9).reduceLeft(*)) //362880
4、spilt、sortWith函数
spilt函数:将字符串根据指定条件的表达式规则进行拆分
sortWith函数:使用自定义的比较函数进行比较
“He is a Spark”.spilt(“ “).sortWith(_.length<_.length).foreach(println)
输出是
a
He
is
Spark
5、 自定义高阶函数
可根据高阶函数的定义进行高阶函数的定义