大数据系列修炼-Scala课程06

关于Scala中的正则表达式与模式匹配结合的正则表达式Reg

正则表达式的实现:正则表达式的定义与其它语言差不多,只需在表达式后加一个.r,并且可以遍历相应的表达式进行匹配

    //定义的正则表达式
    val regex="""([0-9]+) ([a-z]+)""".r //由数字与字母组成的常量
    val numPattern = "[0-9]+".r //由数字组成的常量
    val numberPattern = """\s+[0-9]+\s+""".r //由s与数字+s组成的正则表达式
    println(regex);
    // findAllIn方法返回遍历所有匹配项的迭代器
    for (matchString <- numPattern.findAllIn("99345 Scala, 22298 Spark")) println(matchString)
    // 找到首个匹配项
    println(numberPattern.findFirstIn("99ss java, 222 hadoop"))

与模式匹配结合的Reg实现:在今后可能会经常使用正则表达式与模式匹配进行组合

 //正则表达式与模式匹配结合
    val numitemPattern="""([0-9]+) ([a-z]+)""".r //正则表达式
    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

时间: 2024-12-25 22:18:26

大数据系列修炼-Scala课程06的相关文章

大数据系列修炼-Scala课程03

前言 今天上班看了很多关于前端js,jQuery.bootstrap.js以及springMVC看得迷迷糊糊的,毕竟以前很少去学习前端的技术,所有看得有点困,还好看得比较多,回家后也开始学习关于Scala相关的课程,实验一下每天坚持做大数据相关的事情,一年后会成为什么样子......期待中....,今天也接着昨天的课程继续. Scala内部类实战详解 Scala内部类详解:scala中内部类要访问外部类直接把外部类的对象给内部类了,让其自己访问,内部类也需要实例化,这和java中有很多的区别,内

大数据系列修炼-Scala课程04

Scala中继承实现:超类的构造.字段重写.方法重写 关于超类的构建:超类可以在子类没有位置的限制,可以在子类中调用父类的方法 类中字段重写:在重写字段前面加一个override就可以重新赋值 类中方法重写:与字段重写差不多,参数,方法名也要相同 class Person1(val name : String, var age : Int){ println("The primary constructor of Person") val school = "BJU"

大数据系列修炼-Scala课程07

由于昨天下班后有点困,就没有来及写博客,今天会把它补上!把这个习惯坚持下去! 关于Scala高阶函数详解 1.Scala高阶函数代码实现:高阶函数就是在我们函数中套用函数 2.高阶函数代码详解:高阶函数能够让方法的调用更加便捷 println("Welcome to the Scala worksheet") //> Welcome to the Scala worksheet //(1 to 9)数组中的map方法向数组中放* 用foreach用于来循环 println _ 表

大数据系列修炼-Scala课程08

接下来会讲解关于各种模式匹配,从中就会知道模式匹配的重要性 关于Type.Array.List.Tuple模式解析 1.Type模式匹配代码解析 //关于Type类型的模式匹配 //匹配 Int类型.string类型.Map类型[_,_]代表任意类型的k,v def match_type(t : Any) = t match { case p : Int => println("It is Integer") case p : String => println("

大数据系列修炼-Scala课程02

Scala数组操作实战详解 接着昨天的课程,下面我们继续学习关于Scala数组操作详解.Scala数组的定义 //数组定义 //定长数组格式 /** * val arrayName = new Array[datatype](length) * val arrayName = Array(constant1,constant2,....) */ //不定长数组定义格式 /* * var arrayBufferName =ArrayBuffer[datatype]() */ 数组的基本操作:包括截

大数据系列修炼-Scala课程05

Scala多重继承.构造器的执行顺序.AOP实现 多重继承的trait实现:Scala中接口可以继承具体的类,trait接口可以实现多重继承,并且某个类也可以继承特定的类,在继承后面可以混入,接口的实现 多重继承构造器执行顺序:多重继承构造器执行顺序是从左到右按次序执行,如果前面类以及被继承实现了,后面的类就没有必要去实现,父类只需执行一次 object triatScala { def main(args: Array[String]): Unit = { val t1 = new Piano

大数据系列修炼-Scala课程11

接着昨天的list,也是学习集合的相关知识 ListBuffer.ArrayBuffer.Queue.stack相关操作 1.ListBuffer.ArrayBuffer代码实现:ListBuffer与ArrayBuffer都是mutable可变的与java中的定义也差不多,可以追加的. 2.Queue.Stack相关操作:队列是一端进去一端出来,而stack也是后进先出的原则,他们都是mutable可变的 import scala.collection.mutable.ListBuffer v

大数据系列修炼-Scala课程10

今天主要是关于Scala中对List的相关操作,list在Scala中应该是至关重要,接下来会讲解关于List的一系列操作 List的map.flatMap.foreach.filter操作讲解 1.关于List的Map.flatMap操作.区别 2.对List的foreach.filter操作 //list中的Map中用一个函数表达式-->实则是对list进行操作,_可以表示一个函数或者表达式 List(1, 2, 3, 4, 6) map (_ + 1) //> res0: List[In

好程序员大数据教程分享Scala系列之Option_偏函数_String

好程序员大数据教程分享Scala系列之Option_偏函数_StringOption类型在Scala中Option类型样例类用来表示可能存在或也可能不存在的值(Option的子类有Some和None).Some包装了某个值,None表示没有值. object OptionDemo {def main(args: Array[String]) {val map = Map("a" -> 1, "b" -> 2)val v = map.get("b