随着大数据的发展,spark逐渐成为主流技术之一,而且支撑的scala语言也成为做大数据热门的编程语言之一,在家无聊,就将scala中一些常用的的scala的高端函数以及set、map等代码进行整理,在最后有一个完整的wordcount大数据入门源码
偏应用函数
偏应用函数是一种表达式,不需要提供函数需要的所有参数,只需要提供部分,或不提供所需参数。
/**
* 偏应用函数
*/
deflog(date :Date, s :String)= {
println("date is "+ date +",log is "+ s)
}
val date = new Date()
log(date ,"log1")
log(date ,"log2")
log(date ,"log3")
//想要调用log,以上变化的是第二个参数,可以用偏应用函数处理
vallogWithDate = log(date,_:String)
logWithDate("log11")
logWithDate("log22")
logWithDate("log33")
高阶函数
函数的参数是函数,或者函数的返回类型是函数,或者函数的参数和函数的返回类型是函数的函数。
l 函数的参数是函数
l 函数的返回是函数
l 函数的参数和函数的返回是函数
/**
* 高阶函数
* 函数的参数是函数 或者函数的返回是函数 或者函数的参数和返回都是函数
*/
//函数的参数是函数
def hightFun(f : (Int,Int) =>Int, a:Int ) : Int = {
f(a,100)
}
deff(v1 :Int,v2: Int):Int = {
v1+v2
}
println(hightFun(f, 1))
//函数的返回是函数
//1,2,3,4相加
defhightFun2(a : Int,b:Int) : (Int,Int)=>Int = {
deff2 (v1: Int,v2:Int) :Int = {
v1+v2+a+b
}
f2
}
println(hightFun2(1,2)(3,4))
//函数的参数是函数,函数的返回是函数
defhightFun3(f : (Int ,Int) => Int) : (Int,Int) => Int = {
f
}
println(hightFun3(f)(100,200))
println(hightFun3((a,b) =>{a+b})(200,200))
//以上这句话还可以写成这样
//如果函数的参数在方法体中只使用了一次 那么可以写成_表示
println(hightFun3(_+_)(200,200))
柯里化函数
l 可以理解为高阶函数的简化
/**
* 柯里化函数
*/
def fun7(a :Int,b:Int)(c:Int,d:Int) = {
a+b+c+d
}
println(fun7(1,2)(3,4))
Scala字符串
1. String
2. StringBuilder 可变
3. string操作方法举例
Ø 比较:equals
Ø 比较忽略大小写:equalsIgnoreCase
Ø indexOf:如果字符串中有传入的assci码对应的值,返回下标
/**
* String && StringBuilder
*/
valstr = "abcd"
valstr1 = "ABCD"
println(str.indexOf(97))
println(str.indexOf("b"))
println(str==str1)
/**
* compareToIgnoreCase
*
* 如果参数字符串等于此字符串,则返回值 0;
* 如果此字符串小于字符串参数,则返回一个小于 0 的值;
* 如果此字符串大于字符串参数,则返回一个大于 0 的值。
*
*/
println(str.compareToIgnoreCase(str1))
valstrBuilder =newStringBuilder
strBuilder.append("abc")
// strBuilder.+('d')
strBuilder+ 'd'
// strBuilder.++=("efg")
strBuilder++= "efg"
// strBuilder.+=('h')
strBuilder+= 'h'
strBuilder.append(1.0)
strBuilder.append(18f)
println(strBuilder)
集合
数组
1. 创建数组
Ø new Array[Int](10)
赋值:arr(0) = xxx
Ø Array[String](“s1”,”s2”,”s3”)
2. 数组遍历
Ø for
Ø foreach
3. 创建一维数组和二维数组
4. 数组中方法举例
Ø Array.concate:合并数组
Ø Array.fill(5)(“bjsxt”):创建初始值的定长数组
创建两种方式:
/**
* 创建数组两种方式:
* 1.new Array[String](3)
* 2.直接Array
*/
//创建类型为Int 长度为3的数组
valarr1 =newArray[Int](3)
//创建String 类型的数组,直接赋值
valarr2&n