大資料數列修鍊-Scala課程06

來源:互聯網
上載者:User

標籤:

關於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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.