Scala编程入门---函数式编程

高阶函数

Scala中,由于函数时一等公民,因此可以直接将某个函数传入其他函数,作为参数。这个功能是极其强大的,也是Java这种面向对象的编程语言所不具备的。

接收其他函数作为函数参数的函数,也被称作高阶函数

1 val sayHelloFunc =(name:String) => println("Hello,"+name)
2 
3 def greeting(func:(String)=>Unit,name:String){func(name)}
4 
5 greeting(sayHelloFunc,"leo")

 

高阶函数的另一个功能是将函数作为返回值

def getGreetingFunc(msg:String) = (name:String) => println(msg+","+name)
val greetingFunc = getGreetingFunc("hello")
greetingFunc("leo")

 

高阶函数的类型推断

高阶函数可以自己推断出函数类型,而不需要写明类型,而且对于只有一个参数的函数,还可以省去小括号,如果仅有的一个参数右侧的函数只是用一次,则还可以将接受参数省略,并且将参数用 _ 来替代

诸如:3*_的这种语法,必须掌握,spark中大量的使用了这种语法。

1 def greeting(Func:(String) => Unit,name:String){func(name)}
#调用
2 greeting((name:String) =>println("Hello,"+name),"leo") 3 greeting((name) => println("Hello,"+name),"leo") 4 greeting(name =>pringtln("Hello,"+name),"leo") 5 6 def triple(func:(Int) => Int) ={func(3)} 7 triple(3 *_)

 

Scala的常用的高阶函数

//map:对传入的每个元素都进行映射,返回一个处理后的元素

Array(1,2,3,4,5).map(2* _)

 

//foreach:对传入的每个元素都进行处理,但是没有返回值

(1to9).filter(_ %2== 0)

 

reduceLeft:从左侧元素开始,进行reduce操作,即先对元素1和元素2进行处理,然后将结果与元素3处理,再将结果与元素4处理,依次类推,即为reduce

下面这个操作就相当于1*2*3*4*5*6*7*8*9  

(1to9).reduceLeft(_ * _)

 

sortWith:对元素进行两两相比,进行排序

Array(3,2,5,4,10,1).sortWith(_ < _)

 

posted @ 2017-06-07 17:41  yesyeszero  阅读(181)  评论(0编辑  收藏  举报