Githup项目LearningSpark代码讲解(十)

package scalademo

import scala.io.Source

/**
  * 这个类就是讲一些关于scala的基本语法,为了保证后面讲解spark的时候不会产生一些比较难于理解的东西,在这里都顺一下
  * 我觉得比较难的包括隐式转换,以及逆变我尽量顺一下
  *
  * 知识点:
  * 1 用object定义的对象是单例的
  * 2 当单例对象和某个类共享同一个名字时,他就被称为这个类的伴生对象
  * 3 类和伴生对象必须定义在同一个文件里
  * 4 类和其伴生对象可以互相访问其私有成员
  *
  */

object ScalaGrammar{

  def main(args: Array[String]): Unit = {
    val scalaGrammar = new ScalaGrammar()
    scalaGrammar.setDemo()
  }
}
class ScalaGrammar {

  /**
    * 计算0-100的合
    */
  def sumCount(): Unit ={
    val a = (0 to 100)
    val count = a.reduce(_+_)
    println(count)

    val b = a.foldLeft(0)((x,y)=>x+y)
    println(b)
  }

  /**
    * 列表的基本使用,所有在scala中不用new的对象,其实都是因为在定义类型的时候该类有伴生对象
    * 而伴生对象的apply的方法本身就是一个工厂方法。
    */
  def listDemo(): Unit ={

    val oneTow = List(1,2)
    val threeFour = List(3,4)
    //:::就是实现两个列表的合并,我觉得scala最大的优势就是
    val oneTwoThreeFour = oneTow:::threeFour
    println("oneTow:"+oneTow)
    println("threeFour:"+threeFour)
    println("oneTwoThreeFour:"+oneTwoThreeFour)

    /**
      * 列表最常用的方法大概是'::'他可以把现有的元素组合到列表的最前端
      */
    val twoThree = List(2,3)
    val oneTwoThree = 1::twoThree
    println(oneTwoThree)

  }

  /**
    * 以下演示一下元组的例子,这个类型是我比较喜欢用的类型之一,因为他对类型的限制比较小,而且操作比较简便
    */
  def tupleDemo(): Unit ={
    //定义一个元组
    val pair = (99,"Luftballons")
    //获取99
    println(pair._1)
    //获取"Luftballons"
    println(pair._2)
  }

  /**
    * 下面是set的例子,这个例子和java基本是一样的,所以不用太操心,下面的是不可变Set,不可变的意思就是初始化后的集合不能改变
    *
    */
  def setDemo(): Unit ={
    import scala.collection.immutable.Set
    val jetSet = Set("Boeing","Airbus")
    val set2 = jetSet+"lean"
    println(set2)
  }

  /**
    * 下面这个是可变Map的例子,他和不可变的最大区别就是支不支持+=操作(add操作),在不可变集合中没有add方法
    */
  def mapDemo(): Unit ={
    import scala.collection.mutable.Map
    val treasureMap = Map[Int,String]()
    treasureMap += (1->"a")
    treasureMap += (2->"b")
    treasureMap += (3->"c")
  }


  /**
    * 关于函数式和非函数式一个显著特点就是有没有var的变量,只要有var变量肯定不是函数式编程,没有var变量可能是函数式编程
    * 因为函数是幂等的不会出现非幂等情况
    *
    * @param array
    */
  def functonStyle(array:Array[String]): Unit ={
    //非函数式
    var i = 0
    while (i < array.size){
      println(array(i))
      i+=1
    }

    //函数式
    for(arr <- array){
      println(arr)
    }

    array.foreach(println)
  }

  /**
    * 读取文件
    */

  def readFileDemo(path:String): Unit ={
    val lines = Source.fromFile(path).getLines().toList
    lines.foreach(println)
  }

  /**
    * 富包装器,这个里面列举了一些scala天生自带的
    */
  def richPackerDemo(): Unit ={
    println(0 max 5)
    println(0 min 5)
    println(-2.7 abs)
    println(-2.7 round)
  }
}

你可能感兴趣的:(Spark)