😺高阶函数
定义:高阶函数是是一种特殊的函数,特殊之处在于:它指使用其他函数作为参数或者返回值。
object Base54 {
/**
* 数组
* 1.把数组中每个元素都变成之前的两倍,并把结果保持在一个新数组中
*
*/
def main(args: Array[String]): Unit = {
val arr = Array(1,2,3,4,5)
val fn = (x:Int)=>x*2//fn是一个字面里的函数
val arr1 =arr.map( fn )//map是一个高阶函数,因为他的参数类型是函数!
//用for循环输出
for(i<-arr1){
println(i)
}
}
}
😸map函数
没有必要去定义一个函数fn,直接写在map函数里面,此时,他就是一个匿名函数
object Base54 {
/**
* 数组
* 1.把数组中每个元素都变成之前的两倍,并把结果保持在一个新数组中
*
*/
def main(args: Array[String]): Unit = {
val arr = Array(1,2,3,4,5)
//val fn = (x:Int)=>x*2//fn是一个字面里的函数
//val arr1 =arr.map( fn )//map是一个高阶函数,因为他的参数类型是函数!
//没有必要去定义一个函数fn,这里直接写在map函数里面,此时,他就是一个匿名函数
val arr1 =arr.map(x=>x*2)
//用for循环输出
for(i<-arr1){
println(i)
}
}
}
eg:如何把(-1,2,-3,4,-5)改成(1,2,3,4,5)代码❔
object Base54 {
def main(args: Array[String]): Unit = {
val arr = Array(-1,2,-3,4,-5)
//val fn = (x:Int)=>x*2//fn是一个字面里的函数
//val arr1 =arr.map( fn )//map是一个高阶函数,因为他的参数类型是函数!
//没有必要去定义一个函数fn,这里直接写在map函数里面,此时,他就是一个匿名函数
val arr1 =arr.map(x=>if (x>0)x else -x)
//用for循环输出
for(i<-arr1){
println(i)
}
}
}
😽foreach函数
foreach:依次使用当前的函数来处理数组中的每一个元素
object Base55 {
/**
* 数组
* 1.把数组中每个元素都打印出来
* foreach:依次使用当前的函数来处理数组中的每一个元素
*
*/
def main(args: Array[String]): Unit = {
val arr = Array(-1,2,-3,4,-5)
arr.foreach(x=>{println(x)})
arr.foreach(println)
}
}
😻filter函数
1.把数组中的偶数保留下来,组成新的数组
- filter(函数fn),如果fn的返回值是true,就保留这个元素
object Base56 {
def main(args: Array[String]): Unit = {
val arr = Array(-1,2,-3,4,-5)
val arr1 = arr.filter(x=>x%2==0)
arr1.foreach(println)
}
}
eg:去掉不及格的函数(60,59,80,70)❔
object Base56 {
def main(args: Array[String]): Unit = {
var arr =Array(60,59,80,70).filter(x=>x>=60)
arr.foreach(println)
}
}
eg:将(1,2,3)(4,5,6)改成(1,2,3,4,5,6)❔
object Base56 {
def main(args: Array[String]): Unit = {
var arr1 =Array(Array(1,2,3),Array(4,5,6);
println(arr1(0)(0))
val arr2=arr1.flatten
arr2.foreach(println)
}
}
😹redce函数
reduce 是一种集合操作,用于对集合中的元素进行聚合操作,返回一个单一的结果。它通过指定的二元操作(即取两个元素进行操作)对集合中的所有元素进行递归处理,并最终将其合并为一个值。
object Base57 {
/**
* reduce:聚合
*/
def main(args: Array[String]): Unit = {
var arr =Array(1,2,3,4,5)
val sum =arr.reduce((x,y)=>x+y)
println(sum)
}
}
eg:求最大值和最小值❔
object Base58 {
/**
* reduce:聚合
*/
def main(args: Array[String]): Unit = {
var arr =Array(-1,20,30,14)
//求最大值
val max =arr.reduce((x,y)=>if (x>y) x else y)
println(max)
//求最小值
val min =arr.reduce((x,y)=>if (x<y) x else y)
println(min)
}
}
😿fold函数
fold 是一种集合操作(与reduce类似),用于对集合中的元素进行聚合操作,返回一个单一的结果,需要提供一个初始的“种子”值。
object Base59 {
/**
* fold:带初值的reduce
*/
def main(args: Array[String]): Unit = {
var arr =Array(1,2,3)
val sum1 =arr.fold(100)((x,y)=>x+y)
println(sum1)
}
}
sorted函数
对元素进行排序。它会直接使用元素自身的自然顺序进行排序
object Base60 {
/**
* fold:带初值的reduce
*/
def main(args: Array[String]): Unit = {
var arr =Array(-1,20,3,2,50)
//求最大值
val arr1=arr.sorted
val arr2=Array("banana","zip","b","a","apple")
val arr3=arr2.sorted
arr3.foreach(println)
}
}
sortedWith函数
排序函数:(元素a,元素b)=>Bool,如果返回true,则表示元素a应排在元素b之前
object Base62 {
/**
* sortWith
* 自定义排序规则
*/
def main(args: Array[String]): Unit = {
var arr =Array(-1,0,3,2,1)
//对arr中所有元素按照他们距离3的距离的大小从小到大排序
var arr1 = arr.sortWith((a, b) => Math.abs(a - 3) < Math.abs(b - 3))
arr1.foreach(println)
}
}