標籤:
關於Scala中的Regex與模式比對結合的RegexReg
Regex的實現:Regex的定義與其它語言差不多,只需在運算式後加一個.r,並且可以遍曆相應的運算式進行匹配
//定義的Regex val regex="""([0-9]+) ([a-z]+)""".r //由數字與字母組成的常量 val numPattern = "[0-9]+".r //由數字組成的常量 val numberPattern = """\s+[0-9]+\s+""".r //由s與數字+s組成的Regex println(regex); // findAllIn方法返回遍曆所有匹配項的迭代器 for (matchString <- numPattern.findAllIn("99345 Scala, 22298 Spark")) println(matchString) // 找到首個匹配項 println(numberPattern.findFirstIn("99ss java, 222 hadoop"))
與模式比對結合的Reg實現:在今後可能會經常使用Regex與模式比對進行組合
//Regex與模式比對結合 val numitemPattern="""([0-9]+) ([a-z]+)""".r //Regex val numitemPattern(num, item) = "99 hadoop" //規定模式 val line = "93459 spark" line match{ case numitemPattern(num, blog) => println(num + "\t" + blog) case _ => println("Oops...") }
Scala中本地函數與一等公民函數
本地函數實現:就是函數中包括函數,這樣使函數更加安全。
//本地函數 就是函數中包含函數 這樣就可以使裡面的函數使用外面函數的參數def processData(filename: String, width: Int) { def processLine(line: String) { if (line.length > width) println(filename +": "+ line) } val source = Source.fromFile(filename) for (line <- source.getLines) processLine(line) }}
作為一等公民函數實現;能讓函數表示式能夠更加方便的在編程中使用
//一等公民函數 def main(args: Array[String]): Unit = { //啟動項中設定的參數 val width = args(0).toInt for (arg <- args.drop(1)) processData(arg, width) var increase = (x: Int) => x + 1 println(increase(10)) increase = (x: Int) => x + 9999 val someNumbers = List(-11, -10, -5, 0, 5, 10) //遍曆數組 someNumbers.foreach((x: Int) => print (x)) println //過濾大於0 someNumbers.filter((x: Int) => x > 0).foreach((x: Int) => print (x)) println //過濾大於0 someNumbers.filter((x) => x > 0).foreach((x: Int) => print (x)) println //過濾大於0 someNumbers.filter(x => x > 0).foreach((x: Int) => print (x)) println //過濾大於0 someNumbers.filter(_ > 0).foreach((x: Int) => print (x)) println //定義兩個數字相加 val f = (_: Int) + (_: Int) println(f(5, 10)) }
Scala中偏函數講解
偏函數實現:偏函數能夠讓運算式更加簡潔,沒有必要寫多餘的參數
偏函數解析:偏函數實現的時候會產生對於的apply函數來進行相應的操作
val data = List(1, 2, 3, 4, 5, 6) //使用偏函數來遍曆list 使用空格+_ data.foreach(println _) data.foreach(x => println(x)) def sum(a: Int, b: Int, c: Int) = a + b + c println(sum(1, 2, 3)) val fp_a = sum _ //直接調用定義sum函數 ,調用它相應的apply函數 println(fp_a(1, 2, 3)) println(fp_a.apply(1, 2, 3)) val fp_b = sum(1, _: Int, 3) println(fp_b(2)) println(fp_b(10)) data.foreach(println _) data.foreach(println)
Scala中關於閉包講解
Scala閉包解析:讓函數體用簡單的運算式來實現冗餘的事情
Scala閉包實現
def main(args: Array[String]) { val data = List(1, 2, 3, 4, 5, 6) var sum = 0 data.foreach(sum += _) def add(more: Int) = (x: Int) => x + more val a = add(1) val b = add(9999) println(a(10)) println(b(10)
Scala的函數式編程真的是博大精深啊,很多東西都被他的底層所實現了,這讓我們在使用過程中能更加簡潔了。今天就到這兒
歡迎大家觀看 王家林老師的大資料相關視頻....
王家林號:18610086859
最新視頻72講:http://pan.baidu.com/s/1qWsq6Jy
該部落格的視頻19-22講:http://pan.baidu.com/s/1o63QbPo
大資料數列修鍊-Scala課程06