目录
2.map函数 ,filter函数,reduce函数(由于分开解释太麻烦这里直接统一整)
一.函数
1.匿名函数
val a =(x:Int,y:Int) => x+y
println(3,4)
输出结果:7
2.map函数 ,filter函数,reduce函数(由于分开解释太麻烦这里直接统一整)
map 为映射函数(也就是遍历)"()"括号里的是遍历后进行的操作
filter 为过滤函数 ,“()" 括号里的是条件
take ,取前几位数
reduce ,累加
val list =List(1,2,3,4,5,6,7,8)
val r1=list.map((x:Int)=>x+1) //r1和r2是一样的只是x的类型可以不写,系统会自动判定
val r2 =list.map(x=>x+1)
val r3 =list.map(_+1) //"-"下划线(占位符)表示遍历后所有的元素
println(r1)
println(r2)
println(r3)
val r4=list.map(_*2).filter(_%3==0).take(1) //filter 过滤 括号里的条件 take 取前几个
println(r4)
println(r4.max) //max (过于通用不想解释)
val r5=r1.reduce(_+_) //reduce 累加
输出结果:List(2, 3, 4, 5, 6, 7, 8, 9)
List(2, 3, 4, 5, 6, 7, 8, 9)
List(2, 3, 4, 5, 6, 7, 8, 9)
List(6)
6
44
二.多维列表
//创建一个二维列表f
val f=List(List(1,2),List(3,4),List(5,6),List(7,8))
println(f)
val r6=f.flatten.reduce(_+_)
//flatten ,扁平化,也就是“降维打击” 0.0!,打击后会成为一维列表,然后进行reduce,累加
println(r6)
val r7 =f.flatMap(_.map(_*2)) //flatMap,先扁平然后遍历输出,输出结果都乘2
println(r7)
val r8 =f.flatMap(_.map(_*2)).foreach(println) //foreach 循环 println 输出
println(r8)
输出结果:List(List(1, 2), List(3, 4), List(5, 6), List(7, 8))
36
List(2, 4, 6, 8, 10, 12, 14, 16)
2
4
6
8
10
12
14
16
()
三.对数据进行操作
val list=List(1,2,3,4,"abc") //创建一个定长列表list
def f1(n:Any):Boolean={ //定义一个函数f1,内容是判断n是否是Int类型
n.isInstanceOf[Int]
}
def f2(n:Int):Int={ //定义一个函数f2,内容是n乘2
n*2
}
def f3(n:Any):Int={
n.asInstanceOf[Int]
//定义一个函数f3,内容是把n转换成Int类型,在用asInstanceOf[]之前一定要用isInstanceOf
}
val list1=list.filter(f1).map(f3).map(f2) //filter(f1) 用f1过滤
println(list1)
输出结果:List(2, 4, 6, 8)
四.模式匹配
val list=List(1,3,4,"abc")
//方法一:
def mutlitwo(i:Any):Any={
i match {
case x:Int=>x*2
case _=>
}
}
val list1=list.map(mutlitwo)
println("list1="+list1)
//方法二:
def f2:PartialFunction[Any,Int]={
case i: Int=>i*2
}
val list1=list.collect(f2)
println(list1)
输出结果:list1=List(2, 6, 8, ())
List(2, 6, 8)