val 不可变变量声明,val int a
对于变量来说,尽可能使用不可变变量,在声明变量时可以声明类型也可以不声明类型,但是声明类型后,赋值时,只能赋值同类型或子类型的值。
Java中存在基本类型和封装类型,但是scala中基本类型和引用类型是可以自动转换的,即基本类型也是有方法的,如1.tostring()(一切皆对象),再如,1+1 执行时是1.+(1)。
Scala中无++、——操作符,但是可以用 +=、-=代替,scala提供了大量的库,如scala.math._库中min()、max()。
在建立对象时,scala是调用object的apply方法进行的,类似于java中的工厂方法。
Scala中表达式是有结果或返回值的,这点与java不同,代码块的返回值是,代码块的最后一行的内容的值。
2: 循环结构:while循环
for循环: for(i <- 0 to 20 ) println(i)
for(i<- 0 to 20 if i % 2 == 0) println(i)
函数定义 def f1:int = { 函数体 } (最后一行为返回值)
在函数定义时,若是无法推断函数的返回值时,函数必须显示声明返回值。
默认参数:def f1(param1:int, param2:String = “spark”) = param1 + param2
变长参数:def f1(param:int*) = {},主要是在int后面加上*号
range转换为函数参数:1 to 100 : _* 把range中的所有元素提取出来。
过程即是没有返回值的函数。
Lazy变量:只有在第一次调用时才执行的变量,一般用于耗时的操作中,如文件的读取。
异常处理:try{
}catch{
}finally{
}
catch代码块中用于捕获异常,finally始终执行,用于一些类似于关闭文件的操作。
3:scala中的Array、Map、Tuple
Array可以先声明后赋值,亦可以直接赋值。例如
Val array = Array[Int](5)
array(1) = 2
val array = Array (1, 2, 3, 4)
可变数组ArrayBuffer,可以加入任意数量的元素,不会出现数组越界。
加入操作: arrayBuffer+= (2,3,4)
删除操作:.trimStart(n) //从数组的头开始删除n个元素
.trimEnd(n) //从数组的尾开始删除n个元素
.remove(d) //从数组中删除第d位的元素
并返回删除元素的值
.remove(d,n) //删除数组中从d位算起的其后n个数
插入操作:.insert(d,x)//在d位插入元素,其中可以插入一个或多个元素
转换操作: arraybuffer.toArray //将可变数组转换为长度不可变数组
Array.toBuffer //将不可变数组转换为长度可变数组
数组遍历:for(i<- 0 until (arr.length, 2)) println(arr(i))
for(i <- (0 untilarr.length) .reverse) println(arr(i))//从尾部开始遍历
数组转换为字符串:arr.mkString(“,”)
排序: scala.util.Sortint.quickSort(arr)
遍历时可以使用yield,其将收集yield后的表达式的值并组成一个Array
for (i <- arr if i % 3 == 0) yield i*i
过滤: arr.filter(_ % 3 == 0).map( i => i*i )
Map存储的是键值对
val person = map(“spark” -> 6, “hadoop” -> 11) //赋值
person += (“flink”-> 5) //添加
person -= (“flink” -> 5) //删除
person.contains(“spark”) //包含
person.getorElse(“spark”,100) <=>
if(person.contains(“spark”)person(“spark”)else 100)
for((key,value) <- person) println(key + ” ”+value) //遍历
scala.collection.immutable.SortedMap(“key”->value)//按key值排序
tuple元组 val tuple = (“spark”, 6, 9, 6) //赋值,tuple可以包含任意类型元素
tuple._1 //取元组中位置为1的元素