標籤:
由於昨天下班後有點困,就沒有來及寫部落格,今天會把它補上!把這個習慣堅持下去!
關於Scala高階函數詳解
1.Scala高階函數代碼實現:高階函數就是在我們函數中套用函數
2.高階函數代碼詳解:高階函數能夠讓方法的調用更加便捷
println("Welcome to the Scala worksheet") //> Welcome to the Scala worksheet //(1 to 9)數組中的map方法向數組中放* 用foreach用於來迴圈 println _ 表示函數,把函數當做參數進行傳遞 (1 to 9).map("*" * _).foreach(println _) //> * //| ** //| *** //| **** //| ***** //| ****** //| ******* //| ******** //| ********* //過濾後被2整除的遍曆 println也當做參數進行傳遞這就是高階函數 (1 to 9).filter(_ % 2 == 0) .foreach(println) //> 2 //| 4 //| 6 //| 8 //_*_代表數組中兩個資料相乘 也屬於高階函數 println((1 to 9).reduceLeft(_ * _)) //> 362880 //把字串用空格分割在按照長度排序 "Spark is the most exciting thing happening in big data today".split(" "). sortWith(_.length < _.length).foreach(println) //> is //| in //| the //| big //| most //| data //| Spark //| thing //| today //| exciting //| happening //ceil函數表示向上取值 val fun = ceil _ //> fun : Double => Double = <function1> val num = 3.14 //> num : Double = 3.14 fun(num) //> res0: Double = 4.0 Array(3.14, 1.42, 2.0).map(fun)//fun函數當做函數傳遞 //> res1: Array[Double] = Array(4.0, 2.0, 2.0) //函數表示三的倍數 val triple = (x: Double) => 3 * x //> triple : Double => Double = <function1> Array(3.14, 1.42, 2.0).map((x: Double) => 3 * x) //> res2: Array[Double] = Array(9.42, 4.26, 6.0) Array(3.14, 1.42, 2.0).map{ (x: Double) => 3 * x } //> res3: Array[Double] = Array(9.42, 4.26, 6.0) //定義高階函數 def high_order_functions(f: (Double) => Double) = f(0.25) //> high_order_functions: (f: Double => Double)Double println(high_order_functions(ceil _)) //> 1.0 println(high_order_functions(sqrt _)) //> 0.5 //函數相乘 def mulBy(factor: Double) = (x: Double) => factor * x //> mulBy: (factor: Double)Double => Double val quintuple = mulBy(5) //> quintuple : Double => Double = <function1> println(quintuple(20)) //> 100.0 //3的倍數解析 println(high_order_functions((x: Double) => 3 * x)) //> 0.75 high_order_functions((x) => 3 * x) //> res4: Double = 0.75 high_order_functions(x => 3 * x) //> res5: Double = 0.75 println(high_order_functions(3 * _)) //> 0.75 val fun2 = 3 * (_: Double) //> fun2 : Double => Double = <function1> val fun3: (Double) => Double = 3 * _ //> fun3 : Double => Double = <function1>
Scala中SAM轉換講解
1.SAM的意義:隱式的轉換
2.SAM轉換詳解
var data = 0 val frame = new JFrame("SAM Testing"); val jButton = new JButton("Counter") jButton.addActionListener(new ActionListener { override def actionPerformed(event: ActionEvent) { data += 1 println(data) } }) //隱式函數就把一些函數定義,好比java中的函數定義模組-->這就可以隱式轉換 implicit def convertedAction(action: (ActionEvent) => Unit) = new ActionListener { override def actionPerformed(event: ActionEvent) { action(event) } } //這樣是寫代碼的時候只關心商務邏輯,沒有必要去編寫沒有關係的代碼,直接寫所需的結果 jButton.addActionListener((event: ActionEvent) => {data += 1; println(data)}) //這跟java中的gui編程一樣 frame.setContentPane(jButton); frame.pack(); frame.setVisible(true);
Scala中curring講解
1.curring的定義:curring顆粒度,就是把參數簡化成一個參數進行操作,返回後把另外進行計算
2.curring在項目中重要性:在公式的推到中和計算中相當重要
//curring顆粒度,就是把參數簡化成一個參數進行操作,返回後把另外進行計算 def multiple(x: Int, y: Int) = x * y def multipleOne(x: Int) = (y: Int) => x * y println(multipleOne(6)(7)) //可以把以上的計算方式該項為下面的方法 def curring(x: Int)(y: Int) = x * y println(curring(10)(10)) val a = Array("Hello", "Spark") val b = Array("hello", "spark") //比較兩個變數的是否相等 println(a.corresponds(b)(_.equalsIgnoreCase(_)))
Scala中模式比對入門講解
1.模式比對分析:Scala中匹配模式比較靈活,可以傳入參數和函數等
2.在模式比對中使用守衛:接下的blog中會深入講解
3.模式比對中的變數使用
//模式比對在java中用switch來表示,這裡面限制不是很多,int,byte,char,short val data =2 data match { case 1 => println("First") case 2 => println("Second") case _ => println("Not Known Number") } //Scala中case中可以用條件函數也可以是函數,也可以傳參數 val result = data match { case i if i == 1 => "The First" case number if number ==2 => "The Second" + number case _ => "Not Known Number" } println(result) "Spark !" foreach { c => println ( c match { case ‘ ‘ => "space" case ch => "Char: " + ch } )}
這就是拖欠任務,今天會再寫一篇關於Scala的學習!希望大家關注王家林老師的(18610086859),他會每天都更新大資料的視頻!
最新大資料視頻74講:http://pan.baidu.com/s/1hqJByvU
本文百度雲地址23-26講:http://pan.baidu.com/s/1bOsSQ
大資料數列修鍊-Scala課程07