import scala.math._
object Test {
def main(args: Array[String]): Unit = {
//map迭代集合中的每一个元素,map的参数是一个函数(作为参数的函数又名高阶函数)
(1 to 9).map("*" * _).foreach(println)
(1 to 9).filter(_ % 2 == 0).foreach(println)
//reduceLeft: 首先应用于前两个元素,然后再应用于第一次应用的结果和接下去的一个元素,直至整个列表
println((1 to 3).reduceLeft(_ * _))
//sortWith:自定义排序算法
"Spark is the most exciting thing happening in big data tody".split(" ").sortWith((a, b) => a > b).foreach(println)
//ceil:向上取整函数
val fun = ceil _
val num = 3.14
println(fun(num)) //4.0
Array(3.14, 1.44, 2.0).map(fun).foreach(println)
//右侧是一个匿名函数,参数为x
val triple = (x: Double) => 3 * x
//两种不同的写法
Array(3.14, 1.44, 2.0).map((x: Double) => 3 * x).foreach(println)
Array(3.14, 1.44, 2.0).map{(x: Double) => 3 * x}
//标准定高阶函数,如下,参数是一个函数,参数是Double类型,返回值也是Double类型
def high_order_func(f: (Double) => Double) = f(1.25)
println(high_order_func(ceil))
println(high_order_func(sqrt)) //sqrt开平方
def mulBy(factor: Double) = (x: Double) => factor * x
val quintuple = mulBy(5)
println(quintuple(20))
//逐步变简的写法
println(high_order_func((x: Double) => 3 * x))
println(high_order_func((x) => 3 * x))
println(high_order_func(x => 3 * x))
println(high_order_func(3 * _))
//括号()中的是参数
val fun2 = 3 * (_: Double)
val fun3: (Double) => Double = 3 * _
println(fun2(2.2))
println(fun3(2))
}
}