scala高阶函数

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、 自定义高阶函数
可根据高阶函数的定义进行高阶函数的定义

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值