一、函数式接口

  1. 唯一的抽象方法 使用default定义普通方法(默认方法),通过对象调用。
  2. 实现接口后,因为默认方法不是抽象方法,所以可以不重写,但是如果开发需要,也可以重 写实现接口后。当然如果接口中的默认方法不能满足某个实现类需要,那么实现类可以覆盖默认方法。签名跟接口default方法一致,但是不能再加default修饰符。
  3. 使用static定义静态方法,通过接口名调用。

二、四大常用接口

以下的接口全在java.util.function包下。

1.Supplier<T>(无参有返)

提供一个类型为T的数据,一般用作方法参数。T get()

Supplier<T>			//提供一个T类型的对象
IntSupplier 		//提供一个Int类型的对象
LongSupplier 		//提供一个Long类型的对象
DoubleSupplier 		//提供一个Double类型的对象
BooleanSupplier 	//提供一个Boolean类型的对象

2.Consumer<T>(有参无返)

用于消费数据,消费数据类型通过泛型决定。void accept(T t)

Consumer<T>			//接受单个参数,进行消费
BiConsumer<T,U>		//接受两个参数,进行消费
IntConsumer			//接受一个Integer类型的参数,进行消费
LongConsumer		//接受一个Long类型的参数,进行消费
DoubleConsumer		//接受一个Double类型的参数,进行消费
ObjIntConsumer<T>	//接受T和Integer类型的参数,进行消费
ObjLongConsumer<T>	//接受T和Long类型的参数,进行消费
ObjDoubleConsumer<T>//接受T和Double类型的参数,进行消费

3.Perdicate<T>(有参有返)

用于对某种数据类型的数据进行条件判断。boolean test(T t)

Perdicate<T>		//接受单个参数,进行判断
BiPerdicate<T,U>	//接受两个参数,进行判断
IntPerdicate		//接受一个Integer类型的参数,进行判断
LongPerdicate		//接受一个Long类型的参数,进行判断
DoublePerdicate		//接受一个Double类型的参数,进行判断

4.Function<T,R>(有参有返,T转为R)

用于将一种数据类型转换成另一种数据类型,类似于映射高阶函数map就是用的这个。R apply(T t)

Function<T,R>				//接受T类型的参数,转换成R类型。

IntFunction<R>				//接受Integer类型的参数,转换成R类型。
LongFunction<R>				//接受Long类型的参数,转换成R类型。
DoubleFunction<R>			//接受Double类型的参数,转换成R类型。

ToIntFunction<T>			//接受T类型的参数,转换成Integer类型。
ToLongFunction<T>			//接受T类型的参数,转换成Long类型。
ToDoubleFunction<T>			//接受T类型的参数,转换成Double类型。

IntToLongFunction			//接受Int类型的参数,转换成Long类型。
IntToDoubleFunction			//接受Int类型的参数,转换成Double类型。
LongToIntFunction<T>		//接受Long类型的参数,转换成Integer类型。
LongToDoubleFunction<T>		//接受Long类型的参数,转换成Double类型。
DoubleToIntFunction<T>		//接受Double类型的参数,转换成Integer类型。
DoubleToLongFunction<T>		//接受Double类型的参数,转换成Long类型。

ToIntBiFunction<T,U>		//接受T类型和U类型的参数,转换成Integer类型。
ToLongBiFunction<T,U>		//接受T类型和U类型的参数,转换成Long类型。
ToDoubleBiFunction<T,U>		//接受T类型和U类型的参数,转换成Double类型。

IntUnaryOperator			//接受Integer类型的参数,转换成Integer类型。可以理解为`一元操作符`。
LongUnaryOperator			//接受Long类型的参数,转换成Long类型。
DoubleUnaryOperator			//接受Double类型的参数,转换成Double类型。

IntBinaryOperator			//接受2个Integer类型的参数,转换成Integer类型。可以理解为`二元操作符`。
LongBinaryOperator			//接受2个Long类型的参数,转换成Long类型。
DoubleBinaryOperator		//接受2个Double类型的参数,转换成Double类型。