问题的提出:一个集合中有数字有字符串,如何将其中的数字加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 }
原文:https://www.cnblogs.com/noyouth/p/12814789.html