1.高阶函数介绍:
map:
val list=List(1,2,3,4,5,6,7,8,9)
println(list.map((x:Int)=>x*2))
//自动推断int类型
println(list.map((x)=>x*2))
//一个参数,可去括号
println(list.map(x=>x*2))
//一个参数,简略写法
println(list.map(_*2))

filter and take:
//根据条件过滤数据
println(list.map(_ * 2).filter(_>2))
//只查看前3个数据
println(list.take(3))
![]()
reduce:
println(list.reduce(_-_))
println(list.reduceLeft(_-_))
//Right的结果不一样,为什么
println(list.reduceRight(_-_))

学会借助代码理解函数的原理:
//让reduceRight打印它的计算流程
list.reduceRight((a,b)=>{
println(a+" "+b)
a+b
})
一目了然

zip:类似于inner join
val list1=List(1,2,3)
val list2=List("a","b","c")
println(list1.zip(list2))

//当list1和list2个数不匹配时
val list1=List(1,2,3,4)
val list2=List("a","b","c")
println(list1.zip(list2))

flatten and foreach:
val list1=List(List(1,2),List(3,4),List(5,6))
//打印出其中的所有内容
println(list1)
//依次查看其中的每个元素
list1.foreach(println)
//查看打扁数据
println(list1.flatten)

flatMap:
val list1=List(List(1,2),List(3,4),List(5,6))
//flatMap后是已经打扁了的数据
println(list1.flatMap(x=>x))
//嵌套个map
println(list1.flatMap(_.map(_*2)))

举个例子,wordCount:
lines.flatMap(_.split(" ")) ==> 拆分成一个个单词
.map(x => (x, 1)) ==> 给每个单词捆绑个值
.reduceByKey(_ + _)按key分组,然后把值两两相加
Tuple :tuple是一个集合,里面可以放各种各样类型的元素
val tupletest=(1,2.0,"c")
//打印tupletest的所有数据
println(tupletest)
//取tupletest里的某个值
println(tupletest._1,tupletest._2,tupletest._3)

多行字符串:
val a=
"""
|你好
|我不好
""".stripMargin
另一种输出方法(常用):
val a="Lynn"
println(s"Hello: $a")
//执行结果:
//Hello: Lynn
2.模型匹配:
变量 match {
case 值 => 代码
case 值 => 代码
case _ => 代码 //其他情况就执行这段代码
}
偏函数 PartialFunction
被包在花括号内没有match的一组case语句
PartialFunction[A, B]
A:代表入参类型
B:代表返回类型
举个例子:
def SayChineseName:PartialFunction[String,String]={
case "烙痕" =>"Lynn"
case "老师" =>"Teacher"
case "学生" =>"Student"
}
println(SayChineseName("烙痕"))
//执行结果:
//Lynn
本文深入探讨Scala中的高阶函数应用,包括map、filter、reduce等,通过实例讲解如何利用这些函数处理列表数据,同时介绍了flatMap的使用及wordCount实现方法。此外,还解析了Tuple的特性和多行字符串的创建方式。
748

被折叠的 条评论
为什么被折叠?



