Scala 偏函数 PartialFunction
问题的提出:一个集合中有数字有字符串,如何将其中的数字加1并返回一个新集合呢?使用传统的操作需要经过过滤转换再映射多步操作,而使用偏函数可一步完成。(实际上底层还是多步操作)
object PartialFunctionDemo {
def main(args: Array[String]): Unit = {
val list = List(1, 2, 3, 4, "abc")
val partialFunc = new PartialFunction[Any, Int] {
override def isDefinedAt(x: Any): Boolean = x.isInstanceOf[Int]
override def apply(v1: Any): Int = v1.asInstanceOf[Int] + 1
}
val res = list.collect(partialFunc)
println(res) //List(2, 3, 4, 5)
}
}
构建一个PartialFunction的实现类对象,重写isDefinedAt和apply两个方法,只有isDefinedAt返回为true才去调用apply方法。
偏函数的简写方式1:自定义一个函数,利用模式匹配,返回一个偏函数对象。
def partialFunc: PartialFunction[Any, Int] = {
case i: Int => i + 1
}
偏函数的简写方式2:直接将模式匹配的内容写在代码块中。
val res = list.collect{
case i: Int => i + 1
}

浙公网安备 33010602011771号