• 任务2.1 安装与运行scala
  • 2.1.1 了解Scala特性
  • (1)面向对象
    Scala 是一种纯粹的面向对象语言。一个对象的类型和行为是由类和特征描述的。类通过子类化和灵活的混合类进行扩展,成为多重继承的可靠解决方案。
  • (2)函数式编程
    Scala提供了轻量级语法来定义匿名函数,支持高阶函数,允许函数嵌套,并支持柔数柯里化。Scala的样例类与式匹配支持函数式编程语言中的代数类型。Scala的单例对象提供了方便的方法来组合不属于类的函数。用户还可以使用Scala的模式匹配、编写类假正则表达式的代码处理可扩展标记语言(Extensible MarkupLanguage,XML)格式的数据
  • (3)静态类型
    Scala配备了表现型的系统,以静态的方式进行抽象,以安全和连贯的方式进行使用。系统支持将通用类、内部类、抽象类和复合类作为对象成员,也支持隐式参数,转换和多态方法等,这为抽象编程的安全重用和软件类型的安全扩展提供了强大的支持。
  • 2.1.2 Scala环境设置
  • 安装配置和环境变量如下:
    tar -zxf scala-2.11.12.tgz -C /opt/module
    vi /etc/profile
    export SCALA_HOME=/opt/module/scala-2.11.12
    export PATH=Spark 第二章 scala基础_虚拟机SCALA_HOME/bin
  • 3.验证scala是否安装成功
    运行scala在终端上输入scala
    进入Scala后 输入:(:paste)可以进入Scala的paste模式
  • 任务2.2 运算符的使用
  • 2.2.1运算符的使用
    https://blog.51cto.com/u_16401670/10229961
  • 2.2.2定义与使用数组
    定义数组:var arr:Array「String」 = new Array「String」(num)
    连接数组(1):val arr1 = Array(1,2,3) , val arr2 =Array(4,5,6)
    连接数组【通过concat()方法】(2):
    import Array._
    val arr4 = concat(arr1,arr2)
    创建区间数组(range),生成数组(1,3,5,7,9,11,13,15,17,19)
    val arr = range(1,20,2)
    查看数组(z)的长度:z.length
    查看数组(z)的第一个元素:z.head
    查看数组(z)中除了第一个元素外的其他元素:z.tail
    判断数组(z)是否为空:z.isEmpty
    判断数组(z)是否包含元素“baidu”:z.contains(“baidu”)
  • 2.2.3定义与使用函数
    ①定义函数
    def add(a:Int, b:Int): Int = {a + b}
    ②匿名函数
    (x:Int,y:Int)=>x+y
    ③调用函数
    在创建完的匿名函数命令后面增加
**addInt(1,2)**

④占位符

val addInt=(:Int)+ (_:int)

**在创建完的匿名函数命令后面增加**

  **addInt(1,2)**

⑤高阶函数——函数作为参数(返回值)

高阶函数指的是操作其他函数的函数。高阶函数可以将函数作为参数,也可将函数作为返回值。

**参数:**

  **def addInt(f:(Int,Int)=>Int,a:Int,b:Int)= f (a,b)**

  **addInt((a:Int,b:Int)=>a+b,1,2)**

**返回值:**

  **def rectangle(length:Double)=(height:Double)=>(length+height)*2**

  **val func=rectangle(4)**

  **println(func(5))**

⑥函数柯里化

函数柯里化是指将接收多个参数的函数变换成接收单一参数

**def addInt(a:Int,b:Int):Int=a+b**

**addInt(1,2)**

**(定义两个整数相加的函数)**

**函数柯里化:addInt(1)(2)**

⑦scala练习

https://blog.51cto.com/blogger/success/10235026

  • 任务2.3 统计XXX号码段的数量
  • 2.3.1 使用if判断
    Scala中的if判断根据复杂程度分为if语句、if...else语句、if...else if...else语句、 if...else嵌套语句
    var x = 10
    if(x ==10){
**println("x的值为10")**

}else{if(x ==20){

**println("x的值为20")**

}else{

**println("无法判断x的值")**

}

  • 2.3.2使用for循环
    在Scala中有三种循环结构,分别为:while循环、do...while循环和for循环
    var i, j = 0;
    for(i < - 1 to 2){
**for (j < -1 to 2)**

  **println("(" + i + "," + j + ")")**

}

  • 任务2.4 根据归属地对手机号码进行分组
  • 2.4.1 定义与使用列表
    Scala的列表与数组非常相似,与数组不同的是,列表是不可变的
  • 2.4.2 定义与使用集合
    集合是没有重复对象的,所有元素都是唯一的。
    |方法|描述| |-|-| |defhead: A|获取集合的第一个元素| |def init:SetfAj|返回所有元素,除了最后一个| |def last:A|获取集合的最后一个元素| |deftail:Set[A]|返回所有元素,除了第一个| |def ++(elems: A ): Se:[A]|合并两个集合| |def take(n: Int) ListfA]|获取列表前n个元素| |defcontams(elem: Any): Boolean|判断集合中是否包含指定元素|
  • 2.4.3定义与使用映射
    val person:Map[String,Int]=Map("Jobn"->21,"Betty"->20,"Mike"->22)
    person.isEmpty
    person.keys
    person.values
  • 2.4.4定义与使用元组
    元组是一种类似于列表的结构,但与列表不同的是,元组可以包含不同类型的元素。元组的值是通过将单个的值包含在元括号中构成的。
    元组定义方式1:val t=(1,3.14,"a")
    元组定义方式2:val t =new Tuple3(1,3.14,"a")
    访问元组元素:t._1 或t._3
  • 2.4.5 使用函数组合器
  • 2.4.5.1 map()方法
    val num:List[Int]=List(1,2,3,4,5)
    num.map(x=>x*x)
  • 2.4.5.2 foreach()方法
    val num:List[Int]=List(1,2,3,4,5)
    num.foreach(x=>print(x*x+"\t"))
  • 2.4.5.3 filter()方法
    val num:List[Int]=List(1,2,3,4,5)
    num.filter(x=>x%2==0)
  • 2.4.5.4 flatten () 方法
    val list=List(List(1,2,3),List(4,5,6))
    List.flatten
  • 2.4.5.5 flatMap() 方法
    val str = List("a:b:c","d:e:f")
    str.flatMap(x => x.split(":"))
  • 2.4.5.6 groupBy()方法
    val num:List[Int]=List(1,2,3,4,5,6,7,8,9,10)
    num.groupBy(x =>x%2==0)
  • 任务2.5 编写手机号码归属地信息查询程序
  • 2.5.1 定义Scala类

定义类Point

实例化类并调用类的方法

new Point(1,2).move(2,3)

Scala继承

override 关键字的使用

abstract class Father {

**def fun1 = 1**

**def fun2 = Int**

}

class Child extends Father {

**override def fun1 =2**

**def fun2 = 1**

**}**
  • 2.5.2 使用Scala 单例模式
  • 2.5.2.1 定义单例对象Person
    object Person {
    val age = 10
    def getAge = age
    }
  • 2.5.2.2 伴生类和伴生对象
    class Person private(val name: String){
    private def getSkill() = name +"s skill is:" +Person.skill
    }
    object Person {
    private val skill = "basketball"
    private val person = new Person("Tracy")
    def printSkill = println(person.getSkill())
    def main(args: Array[String]): Unit = {
Person.printskill

}

}

  • 2.5.3使用Scala模式匹配
    def matchTest(x: Int) = x match {
    case 1 => println("one")
    case 2 => println("two")
    case _ =>println("many")
    }
  • 2.5.4读写文件
    写入文件:
    import java.io._
    var pw = new PrintWriter(new File("/opt/test.txt"))
    pw.println("I am learning Scala")
    读取文件:
    import scala.io.Source
    Source.fromFile("/opt/test.txt").foreach{print}