大数据 -- Scala:方法、函数、数组、元组
1、方法
1)语法:
def methodName (参数名:参数类型, 参数名:参数类型) : [return type] = {
// 方法体:一系列的代码
}- 参数列表的参数类型不能省略
- 返回值类型可以省略,由scala编译器自动推断
- 返回值可以不写return,默认就是{}块表达式的值注意:如果定义递归方法,不能省略返回值类型
递归方法:求阶乘 10*9*8*..*1
2)方法的参数
默认参数:
在定义方法时可以给参数定义一个默认值
带名参数:
在调用方法时,可以指定参数的名称来调用
变长参数://在参数类型后面加一个*号,表示参数可以是0个或者多个
如果方法的参数是不固定的,可以定义一个方法的参数是变长参数
格式:
def 方法名(参数名:参数类型*):返回值类型 = {
方法体
}
2、函数
scala支持函数式编程,将来编写Spark/Flink程序中,会大量使用到函数
语法:val 函数变量名 = (参数名:参数类型, 参数名:参数类型....) => 函数体
注意:
函数是一个对象(变量)
相同点:类似于方法,函数也有输入参数和返回值
区别:函数定义不需要使用def定义 ; 无须指定返回值类型
匿名函数:
一个函数没有赋予一个变量,则称为匿名函数,
后期再实际开发代码的时候,基本上都是使用匿名函数
(x:Int,y:Int)=>x+y
方法和函数的区别:
方法是隶属于类或者对象的,在运行时,他是加载到JVM的方法区中的
可以将函数对象赋值给一个变量,在运行时,他是加载到JVM的堆内存中
函数是一个对象,继承自FunctionN , 函数对象有apply , curried , toString , tupled 这些方法,而方法没有
方法转换为函数:
有时候需要将方法转换为函数,作为变量传递,就需要将方法转换为函数 ??
使用 “_” 即可将方法转换为函数
3、数组
Scala中数组的概念是和java类似的,可以用数组来存放一组数据
Scala 中,有两种数组,一种是定长数组,另一种是变长数组
定长数组:
定义:指的是数组的长度不允许改变
数组的元素是可以改变的
语法:
// 通过指定长度定义数组
val/var 变量名 = new Array[元素类型](数组长度)// 用元素直接初始化数组
val/var 变量名 = Array(元素1, 元素2, 元素3...)注意:
在scala中,数组的泛型使用[]来指定 new Array[Int](10)
使用()来获取元素 a(0)
变长数组:
定义:
指的是数组的长度是可以改变的,可以往数组添加、删除元素
创建变长数组,需要提前导入ArrayBuffer类
import scala.collection.mutable.ArrayBuffer
语法:
创建空的ArrayBuffer变长数组 val/var a = ArrayBuffer[元素类型]()
创建带有初始元素的ArrayBuffer val/var a = ArrayBuffer(元素1,元素2,元素3....)
变长数组的增删改操作:
使用
+=
添加元素使用
-=
删除元素使用
++=
追加一个数组到变长数组
遍历数组:
使用 for表达式 直接遍历数组中的元素
使用 索引 遍历数组中的元素
注意:
//0 until n ——生成一系列的数字,包含0,不包含n
//0 to n ——包含0,也包含n
数组常用操作:
求和——sum方法
求最大值——max方法
求最小值——min方法
排序——sorted方法
4、元组
元组可以用来包含一组不同类型的值,例如用户的个人信息,包括姓名、性别、年龄 等 。
元组的元素是不可变的。
定义元组:
- 使用括号来定义元组 val/var 元组变量名称 = (元素1, 元素2, 元素3....)
- 使用箭头来定义元素(元组只有两个元素) val/var 元组 = 元素1->元素2
访问元组:
_1 , _2 , _3 , ..... 来访问元组中的元素,_1表示访问第一个元素,依次类推