九.数组操作
flatMap
val arr = Array(Array(1, 2, 5, 4), Array(3, 6, 7, 8), Array(9, 10))
//flatten只能一次压一层
val flatten = arr.flatten
println(flatten.toBuffer)
val lines = Array("spark hadoop flink spark", "spark spark flink", "spark flink")
val lines1 = lines.map(_.split(" "))
lines1.flatten
lines.map(_.split(" ")).flatten
lines.flatMap(_.split(" "))
//以上三者相同 但是后两者更能凸显函数式编程的好处
//三者输出结果都是
ArrayBuffer(spark, hadoop, flink, spark, spark, spark, flink, spark, flink)
}
Fold
def main(args: Array[String]): Unit = {
val arr = Array(1, 2, 3, 4, 5)
//柯里化方法 第一个_ 代表初始值(100) 或者中间累加的结果
val r = arr.fold(100)(_ + _)
100+arr.reduce(_+_) //等价于 r
//左右的_ + _ 是一样的结果
arr.foldLeft(100)(_+_)
arr.foldRight(100)(_+_)
arr.foldLeft(100)(_-_)
arr.foldRight(100)(_-_) //(1-(2-(3-(4-(5-100)))))=-97
println(r)
}
ReduceLeft和ReduceRight
def main(args: Array[String]): Unit = {
val arr = Array(1, 2, 3, 4, 5)
//1+2=3
//3+3=6
//6+4=10 ...
arr.reduceLeft(_+_)
//1-2 -3 -4 - 5 =-13
arr.reduceLeft(_-_)
//(1-(2(3-(4-5))))
val i = arr.reduceRight(_ - _)
println(i)
}
Tuple
def main(args: Array[String]): Unit = {
//元祖一旦定义 不能更改长度 不能更改值
//可以装不同类型的数组
val t = (2, 3.0) //tuple
val r = t._2 //没有t._0
println(r) //3.0
println(t.swap) //(3.0,2),对偶元组的位置交换
//只有两个元素的元祖也可以称为对偶元组
}