偏函数

偏函数不是函数,而是一个triat

首先来看下偏函数的定义

Demo

def main(args: Array[String]): Unit = {
    val list = List(1,3,4,5,"lits")


    // 输入的 是 Any ,返回的 Int
    // 如果返回true,则调用apply 创建对象实例,如果返回false,过滤
    val partialFunction = new PartialFunction[Any,Int] {
      override def isDefinedAt(x: Any): Boolean =  x.isInstanceOf[Int]

      // 对 传入 的值加 1 返回
      override def apply(v1: Any): Int = {
        v1.asInstanceOf[Int] + 1
      }
    }

    // 如果使用 偏函数,就要使用 collect
    // 遍历 list ,如果 true ,调用 apply,如果 false,不调用。
    val list2 = list.collect(partialFunction)
    println(list2)

  }
 def main(args: Array[String]): Unit = {

    val list = List(1,3,4.0,5,"lits")

    // 简写
    // isDefine apply 这两个函数 可以 不用写,直接写 case
    // case 后面的 表达式的意思 其实就相当于 isDefine 和 apply 的逻辑
    // 即 判断是否是某个类型,然后进行操作。
    // 这样的话,就可以写多个逻辑判断了
    def  f1:PartialFunction[Any,Int]={
        //   isDefine  apply
        case i:Int => i +1
        case j:Double => (j * 2).toInt
    }

    val list1 = list.collect(f1)
    println(list1)

    // 第二种简写形式,就是将 case 语句直接放入到 collect中。

    val list2 = list.collect{case i:Int => i +1}
    println(list2)

  }

Last updated