Scala 偏函数

391 阅读1分钟

偏函数定义

// [String, String] 第一个为入参类型,第二个为出参类型
def fun2: PartialFunction[String, String] ={
    case "AAA" => "输出:AAA"
    case "BBB" => "输出:BBB"
    case "CCC" => "输出:CCC"
    case "DDD" => "输出:DDD"
    case _ => "---"
}

println(fun2("AAA"))

执行结果:

image.png

偏函数应用场景:对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)

执行结果:

image.png