开发者学堂课程【Scala 核心编程 - 进阶:偏函数的简写形式】学习笔记,与课程紧密连接,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/610/detail/9088
偏函数的简写形式
偏函数简化形式
声明偏函数,需要重新写特质中的方法,有的时候会略显麻烦,而 Scala 其实提供了简单的方法
1、简化形式1代码说明
//只需要声明传入参数的类型和返回参数的类型,直接写 case
def f2:PartialFunction[Any,Int]={
// case 怎样写取决于原先的代码逻辑,匹配上写 i+1,匹配不上不写任何代码,不会异常,在底层做优化
case i:Int=>i+1//case语句可以自动转换为偏函数
}
val list2 = List(1,2,3,4,"ABC").collect(f2)
// isDefinedAt 、 isInstanceOf 和 apply 业务量逻辑可以精简成一句话 case i:Int=>i+1,i 可以随便写如a、b
新建文件 PartialFun03 :
package com.atguigu.chapter13
object PartialFun03{
def main(args: Array[String]): Unit ={
//可以将前面的案例的偏函数简写
def partialFun2 : PartialFunction[Any,Int]={
//简写成 case 语句
case i:Int =>i + 1
}
val list = List(1,2,3,4,”hello”)
val list2 = list.collect(partialFun2)
println(“list2=” + list2)
}
}
执行:
D:\program\jdk8\bin\java ...
list2=List(2,3,4,5)
Process finished with exit code 0
小数形式:
package com.atguigu.chapter13
object PartialFun03 {
def main(args:Array[String]):Unit={
//可以将前面的案例的俯函数简写
def partialFun2:PartialFunction[Any,Int]={
//简写成case 语句
case i:Int => i + 1
//只有 j * 2 不能转成 Int ,可以写 implicit 来转
case j:Double => (j * 2).toInt
}
val list = List(1, 2, 3, 4, 1.2, 2.4, "hello")
val list2=list.collect(partialFun2)
println("list2="+ list2)
}
}
效果:
D:\program\jdk8\bin\java ...
list2=List(2,3,4,5,2,4)
Process finished with exit code 0
//可以对不同的类型甚至更多的判断进行处理
2、简化形式2代码说明
val list3 = List(1,2,3,4,"ABC").collect{case i:Int=>i+1}
println(list3)
package com.atguigu.chapter13
object PartialFun03 {
def main(args:Array[String]):Unit={
//可以将前面的案例的俯函数简写
def partialFun2: PartialFunction[Any,Int]={
//简写成case 语句
case i:Int => i + 1
case j:Double => (j * 2).toInt
}
val list = List(1, 2, 3, 4, 1.2, 2.4, "hello") val list2=list.collect(partialFun2) println("list2="+ list2)
//第二种简写形式
val list3 = list.collect{
case i:Int => i+1
case j:Double => (j*2).toInt
}
println(“list3=”+list3)//(2,3,4,5)
}
}
运行效果:
D:\program\jdk8\bin\java ...
list2=List(2,3,4,5,2,4)
list3=List(2,3,4,5)
Process finished with exit code 0
加入 1.9f:
package com.atguigu.chapter13
object PartialFun03 {
def main(args:Array[String]):Unit={
//可以将前面的案例的俯函数简写
def partialFun2: PartialFunction[Any,Int]={
//简写成case 语句
case i:Int => i + 1
case j:Double => (j * 2).toInt
}
val list= List(1,2,3, 4, 1.2, 2.4, 1.9f,"hello") val list2=list.collect(partialFun2) println("list2="+ list2)
//第二种简写形式
val list3 = list.collect{
//偏函数的处理
case i:Int => i+1
case j:Double => (j*2).toInt
//最好换一个名字
case k:Float => (k*3).toInt
}
println(“list3=”+list3)//(2,3,4,5)
}
}
运行效果:
D:\program\jdk8\bin\java ...
list2=List(2,3,4,5,2,4)
list3=List(2,3,4,5,2,4,5)
Process finished with exit code 0