23.Scala高阶函数实战详解

高阶函数:把函数作为参数来传递。

即函数和值(整数或者字符串之类的)是一样的,函数是Scala的一等公民,函数可以保存在其他变量里。

Spark中主要用高阶函数。


object High_Order_Functions_23 {
  def main(args: Array[String]): Unit = {
    //7
    (1 to 9).map("*" * _).foreach { println _ }     //1是对象 to是方法 1 to 9是一个集合 1,2,3,4...9 map方法迭代集合中的每一个元素 foreach也是个函数

    println


  (1 to 9).filter(_ % 2 == 0).foreach(println) //过滤出集合中的偶数

    println

 println((1 to 9).reduceLeft(_ * _)) // 1*2*3*...*9

    println

 "Spark is the most exciting thing happening in big data today".split(" ").sortWith(_.length < _.length).foreach(println) //按单词的长度升序排列 }}

输出:

*
**
***
****
*****
******
*******
********
*********
2
4
6
8
362880
is
in
the
big
most
data
Spark
thing
today
exciting
happening

 val fun = ceil _
    val num = 3.14
    println(fun(num))
    Array(3.14, 1.42, 2.0).map(fun).foreach(println)

输出:

4.0
4.0
2.0
2.0

 val triple = (x : Double) => 3 * x   //匿名函数
    Array(3.14, 1.42, 2.0).map((x : Double) => 3 * x).foreach(println)
    Array(3.14, 1.42, 2.0).map((x : Double) => 3 * x).foreach{println

输出:

9.42
4.26
6.0
9.42
4.26
6.0

def high_order_functions(f: (Double) => Double) = f(0.25)   //f是函数,(Double)是函数f的参数
    println(high_order_functions(ceil _))   //把0.25交给ceil去处理
    println(high_order_functions(sqrt _))   //把0.25交给sqrt去处理
输出:

1.0
0.5

def mulBy(factor : Double) = (x : Double) => factor * x   //x是运行时传入的参数
    val quintuple = mulBy(5)
    println(quintuple(20))
输出:100.0

  println(high_order_functions( (x : Double) => 3 * x) )  //把(x : Double) => 3 * x)这个函数作用于high_order_functions
    println(high_order_functions((x) => 3 * x))  //可去掉:Double,因为high_order_functions函数输入是0.25,所以可推导出是输入类型是Double
    println(high_order_functions( x => 3 * x))   //只有一个输入参数,可去掉括号
    println(high_order_functions( _ * 3))        //只有一个输入参数,可用占位符_代替
输出:

0.75
0.75
0.75
0.75

val fun2 = 3 * (_ : Double)  //: Double 不可以去掉,因为scala无法推导出类型
    println(fun2(3))
    
    
    val fun3 : (Double) => Double = 3 * _
    println(fun3(8))

输出:

9.0
24.0


参考资料来源于 DT大数据梦工厂Scala零基础实战经典第23课 由王家林老师讲解






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值