Function1
带一个参数的方法,声明时,它需要两个泛型参数,第一个是传入的数据类型,第二个表示返回的数据类型,Function1是 trait ,它有一个apply方法,用来对输入参数进行处理了,使用Function1,必须实现apply接口
object Main extends App {
val succ = (x: Int) => x + 1
val anonfun1 = new Function1[Int, Int] {
def apply(x: Int): Int = x + 1
}
assert(succ(0) == anonfun1(0))
}
Function2
带两个参数的方法,它的声明需要三个泛型参数,前两个是入参类型,第三个是返回数据类型,同Function1一样,也要实现apply方法
object Main extends App {
val max = (x: Int, y: Int) => if (x < y) y else x
val anonfun2 = new Function2[Int, Int, Int] {
def apply(x: Int, y: Int): Int = if (x < y) y else x
}
assert(max(0, 1) == anonfun2(0, 1))
}
=========================
spark的Aggregator类
case class Aggregator[K, V, C] (
createCombiner: V => C,
mergeValue: (C, V) => C,
mergeCombiners: (C, C) => C) {
//省略部分代码
}
它的构造函数其实为:
Aggregator(scala.Function1<V,C> createCombiner,
scala.Function2<C,V,C> mergeValue,
scala.Function2<C,C,C> mergeCombiners)
参考: