偏函数定义
// [String, String] 第一个为入参类型,第二个为出参类型
def fun2: PartialFunction[String, String] ={
case "AAA" => "输出:AAA"
case "BBB" => "输出:BBB"
case "CCC" => "输出:CCC"
case "DDD" => "输出:DDD"
case _ => "---"
}
println(fun2("AAA"))
执行结果:
偏函数应用场景:对Array[Any]中指定的类型数据进行计算。
// 对array中的int类型 *5 输出
println("scala常规写法")
val array = Array(1, 2, true, "PK", 10.0)
array.filter(_.isInstanceOf[Int])
.map(_.asInstanceOf[Int])
.map(_*5)
.foreach(println)
// 小学偏函数写法
println("小学偏函数写法")
val partilaFunction = new PartialFunction[Any, Int] {
override def isDefinedAt(x: Any): Boolean = {
if (x.isInstanceOf[Int]) true
else false
}
override def apply(v1: Any): Int = v1.asInstanceOf[Int] * 5
}
array.collect(partilaFunction).foreach(println)
// 中学偏函数写法
println("中学偏函数写法")
array.collect({
case i:Int => i * 5
}).foreach(println)
// 高中偏函数写法
println("高中偏函数写法")
array.collect{
case i:Int => i * 5
}.foreach(println)
执行结果: