首页 > 技术文章 > Scala 偏函数 PartialFunction

noyouth 2020-05-01 20:56 原文

  问题的提出:一个集合中有数字有字符串,如何将其中的数字加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
}

  

 

推荐阅读