一,变量

1,基本数据类型

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

Spark学习(二)scala语法 随笔 第1张

2,基本运算符

Spark学习(二)scala语法 随笔 第2张

3,定义变量

Spark学习(二)scala语法 随笔 第3张

4,复杂变量

Spark学习(二)scala语法 随笔 第4张

 (1)定义数组Array:

  •    声明:val aList=new Array[数据类型type](n):声明存储数据类型为type的n个对象,数组初始化为null
  •    声明:val aList=Array(n1,n2,n3...):声明时,可以不用声明数据类型。
  •    调用:aList(m):调用第m个元素。
  •    声明多维数组:val aList=Array.ofDim[数据类型](a,b):声明行为a,列为b的二维数组
  •    调用多维数组中的元素:aList(a1)(b1):调用数组中行为a1,列为b1的元素

(2)定义元组Tuple(对多个不同类型的对象的简单封装):

  •      声明: val tStudent=("name1",23,"男",560.00):声明元组类型学生的信息为(姓名,年龄,性别,月开销)
  •      调用:tStudent._1(取出"name1");tStudent._2(取出23);tStudent._3(取出"男")....

(3)定义容器Collection(导包scala.collection;scala.collection.mutable;scala.collection.immutable)

       scala.collection:封装了可变容器和不可变容器的通用操作的超类(从上到下依次继承都是特质(类似Java的接口),不是具体的容器

       Spark学习(二)scala语法 随笔 第5张  Spark学习(二)scala语法 随笔 第6张

         foreach方法:遍历当前容器内所有元素

(4)定义序列Sequence(如上图Seq有两个子序列:IndexedSeq和LinearSeq)有存入数据有先后顺序,可以重复

       LindearSeq:列表和队列可以继承该类

                        List(列表):具体的容器类,列表内的对象必须是同类型,列表内的值不可变(必须导包scala.collection.immutable)

                                          定义:val slPeople=List("张三","李四","王五"......)

                                          头部:head;尾部:tail    获取头部(第一个元素:slPeople.head);获取尾部(除去第一个元素以外的元素:slPeople.tail)

                                          向列表头添加新的元素从而生成新的列表:val  slNewList="赵四"::slPeople(不能给列表的尾添加元素)

                                          Spark学习(二)scala语法 随笔 第7张

 

                      Range(队列):是一种特殊的带索引的不可变数字等差序列(range内可以存放任何类型数据)

 

                                           定义:val irNum=new Range(n1,n2,m):与Python的range函数功能相同,n1(开始量)n2(结束量,取不到)m(步长)

 

                                            1 to  8  by 1:得到包括8的Range(1,8,1)序列

                                            1 until 8  by 1:得到Range(1,8,1)序列

                                         Spark学习(二)scala语法 随笔 第8张

       IndexedSeq:Vector和ArrayBuffer可以继承该类

 

                         Vector(向量):

 

                                               定义:val svPeople=Vector("张三","李四","王五"......)

 

                                               获取元素svPeople(n):获取第n+1个元素

                                               向Vector的头添加元素:svPeople1="赵四"+:"钱七"+:svPeople;向Vector的尾添加元素:val svPeople2=svPeople:+"孙八"

                                          Spark学习(二)scala语法 随笔 第9张

 

(5)定义集合Set:存放不重复元素,没有先后顺序,用哈希方法去查找元素(默认为不可变集合)

 

                    可变集:(导包scala.collection.mutable)

 

                    不可变集:(导包scala.collection.immutable)

import scala.util.control.Breaks._;
import scala.collection;
import scala.collection._;
import scala.collection.immutable._;   
var ssPeople=Set("张三","李四");     //Set("张三","李四")是不可变集,将不可变集赋给可变变量ssPeople
ssPeople+="王五";                   //将"王五"赋加给变量ssPeople后生成新的不可变集Set("张三","李四","王五")
import scala.collection.mutable._;    //要定义可变集必须导入这个包
val ssPeople1=Set("张三","李四");      //Set("张三","李四")是可变集,
ssPeople1+="王五";

                  Spark学习(二)scala语法 随笔 第10张

(6)定义映射Map:一系列键值对的容器,键唯一但值不唯一(默认为不可变映射)

                    可变映射:(导包scala.collection.mutable)

                    不可变映射:(导包scala.collection.immutable)

import scala.util.control.Breaks._;
import scala.collection;
import scala.collection._;
import scala.collection.immutable._;
var ssPeople=Map("姓名:"->"张三","年龄:"->16);     //不可变映射
import scala.collection.mutable._;    //要定义可变集必须导入这个包
val ssPeople1=Map("姓名:"->"张三","年龄:"->16);     //Set("张三","李四")是可变映射,
ssPeople1+=("性别"->"男","学号:"->20173522);   //向可变映射中添加多个元素
ssPeople1("姓名:")="李四";      //更新可变映射中的元素
ssPeople1("学校:")="石家庄铁道大学";    //向可变映射中添加单个元素
print("查询姓名");
var result=if(ssPeople1.contains("姓名:"))  ssPeople1("姓名:")  else  "无法查询姓名"  //当映射中存在键为"姓名:"则将对应的值赋给result,否则将无法查询xx赋给result
print(s"姓名:$result");

               Spark学习(二)scala语法 随笔 第11张

二,输入,输出

     1,从控制台输入(导包:scala.io.StdIn):

          Spark学习(二)scala语法 随笔 第12张

      2,输出(默认导包scala.Predef):

          (1)类Java的输出方式: print("姓名:"+name+"\t年龄:"+age)或println("姓名:"+name+"\t年龄:"+age)

          Spark学习(二)scala语法 随笔 第13张

          (2)类C的输出方式:printf("姓名:%s\t年龄:%s",name,age)

         Spark学习(二)scala语法 随笔 第14张

         (3)s插值字符串输出法:print(s"姓名:$name\t年龄:$age")

         Spark学习(二)scala语法 随笔 第15张

         (4) f插值字符串输出法(格式化):

         Spark学习(二)scala语法 随笔 第16张

三,读写文件(导包java.io.PrintWriter和scala.io.Source)

       1,写入(导包java.io.PrintWriter):向文件test.txt中写入信息:

            Spark学习(二)scala语法 随笔 第17张

           Spark学习(二)scala语法 随笔 第18张

       2,读取(导包scala.io.Source):

          Spark学习(二)scala语法 随笔 第19张

四,控制结构

     1,for结构:

        用法一:基本结构

       Spark学习(二)scala语法 随笔 第20张      Spark学习(二)scala语法 随笔 第21张

         用法二:for结构中加条件

         Spark学习(二)scala语法 随笔 第22张        Spark学习(二)scala语法 随笔 第23张

         用法三:支持多个生成器,用;隔开 

        Spark学习(二)scala语法 随笔 第24张

        用法四:将遍历的值付给变量

        Spark学习(二)scala语法 随笔 第25张

       Spark学习(二)scala语法 随笔 第26张

   2,异常处理(try......catch.....)

   3,循环控制(不存在break和continue终止循环)

        使用Breaks类(导包scala.util.control)

       当使用breakable方法:

import scala.util.control.Breaks._;
var i=0;
val array=Array(1,3,6,15,9,12,16);
breakable{      //这个大括号不能换行
    for(i<-array)
    {
        if(i>10) break;   //循环到15直接跳出循环
        print(i+"\t");
    }
}

       Spark学习(二)scala语法 随笔 第27张

   4,判断值是否存在:contains()

五,类

    1,定义方法:当有返回值,则返回String,Int,Boolean;无返回值,则返回Unit类型

         Spark学习(二)scala语法 随笔 第28张

         参数列表中的参数不能用val,var修饰

          参数列表没有时,可以不用()

          (参数列表)可以写成{参数列表};当只有一个参数时,可以用中缀调用法

          Spark学习(二)scala语法 随笔 第29张

          当方法体只有一条语句,可以省略{}

import scala.util.control.Breaks._;
class Conent{      //不能换行
    var value=0;
    def dIncrement(s:Int):Unit={
        value+=s;
    }
    def dCurrent():Int={
        value;
    }
}
val conent=new Conent;
conent.value=5;
conent.dIncrement(2);
print(conent.dCurrent);

     2,类似Java的get,set方法:value方法相当于Java的Getxx方法,获取类中的变量的值;value_方法相当于Java的Setxx方法,修改类中变量的值。

import scala.util.control.Breaks._;
import scala.io.StdIn;
class Student{
    private var pvsName="";
    private var pviAge=0;
    def valueName=pvsName;
    def valueName_=(newName:String){
        pvsName=newName;
    }
    def valueAge=pviAge;
    def valueAge_=(newAge:Int){
        if(newAge>0 &&newAge<200){
              pviAge=newAge;
        }
    }
}
val students=new Student;
printf("请输入姓名:");
var sname=readLine();
students.valueName_=(sname);
printf("请输入年龄:")
var iage=readInt();
students.valueAge_=(iage);
printf("学生姓名:%s \t 学生年龄:%d",students.valueName,students.valueAge);

六,构造器

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄