jdk8之函数式编程Function

前言

函数式接口(Functional Interface)是Java 8对一类特殊类型的接口的称呼。 这类接口只定义了唯一的抽象方法的接口,并且这类接口使用了@FunctionalInterface进行注解。在jdk8中,引入了一个新的包java.util.function, 可以是java 8 的函数式编程变得更加简便。这个package中的接口大致分为了以下四类:

  • Function: 接收参数,并返回结果,主要方法 R apply(T t)
  • Consumer: 接收参数,无返回结果, 主要方法为 void accept(T t)
  • Supplier: 不接收参数,但返回结果,主要方法为 T get()
  • Predicate: 接收参数,返回boolean值,主要方法为 boolean test(T t)

本文也按照这四类,来梳理下java8对函数式编程做了哪些支持。

1、Function

Function接口表示一个方法接收参数并返回结果。

1.1 单个参数(一元函数)

1.1.1、参数类型和返回值类型调用处指定

接口 方法 参数类型 返回值类型
Function<T,R> R apply(T t) T R

1.1.2、指定参数类型,返回值类型由调用处指定

接口 方法 参数类型 返回值类型
IntFunction< R> R apply(int value) int R
LongFunction< R> R apply(long value) long R
Double< R> R apply(double value) double R

1.1.3、参数类型有调用处指定,指定返回值类型

接口 方法 参数类型 返回值类型
ToIntFunction< T> int applyAsInt(T value) T int
ToLongFunction< T> long applyAsLong(T value) T long
ToDoubleFunction< T> double applyAsDouble(T value) T double

1.1.4、既指定了接收参数类型,也指定了返回参数类型

接口 方法 参数类型 返回值类型
IntToLongFunction long applyAsLong(int value) int long
IntToDoubleFunction double applyAsLong(int value) int double
LongToIntFunction int applyAsLong(long value) long int
LongToDoubleFunction double applyAsLong(long value) long double
DoubleToIntFunction int applyAsLong(double value) double int
DoubleToLongFunction long applyAsLong(double value) double long

1.1.5、特殊的Function,接收参数类型和返回参数类型一样

接口 方法 参数类型 返回值类型
UnaryOperator< T> T apply(T t) T T
IntUnaryOperator int applyAsInt(int operand) int int
LongUnaryOperator long applyAsLong(long operand) long long
DoubleUnaryOperator double applyAsDouble(double operand) double double

1.2、两个参数(二元函数)

1.2.1、参数类型和返回值类型都由调用处指定

接口 方法 参数类型 返回值类型
BiFunction<T,U,R> R apply(T t, U u) T,U R

1.2.2、指定返回参数类型

接口 方法 参数类型 返回值类型
ToIntBiFunction<T,U> int applyAsInt(T t, U u) T,U int
ToLongBiFunction<T,U> long applyAsLong(T t, U u) T,U long
ToDoubleBiFunction<T,U> double appleyAsDouble(T t, U u) T,U double

1.2.3、特殊的BiFunction, 接收参数和返回参数类型一样

接口 方法 参数类型 返回值类型
BinaryOperator< T> T apply(T t, T u) T,T T
IntBinaryOperator int applyAsInt(int left, int right) int,int int
LongBinaryOperator long applyAsInt(long left, long right) long,long long
DoubleBinaryOperator double applyAsInt(double left, double right) double,double double

2、Consumer

表示一个方法接收参数但不产生返回值。

2.1、接受一个参数(一元函数)

接口 方法 参数类型 返回值
Consumer< T> void accept(T t) T 无返回值
IntConsumer void accept(int value) int 无返回值
LongConsumer void accept(long value) long 无返回值
DoubleConsumer void accept(double value) double 无返回值

2.2、接受两个参数(二元函数)

接口 方法 参数类型 返回值
BiConsumer<T,U> void accept(T t, U u) T,U 无返回值
ObjIntConsumer< T> void accept(T t, int value) T,int 无返回值
ObjLongConsumer< T> void accept(T t, long value) T,long 无返回值
ObjDoubleConsumer< T> void accept(T t, double value) T,double 无返回值

3、Supplier

返回一个结果,并不要求每次调用都返回一个新的或者独一的结果

接口 方法 参数类型 返回值
Supplier< T> T get() 无参数 T
BooleanSupplier boolean getAsBoolean() 无参数 boolean
IntSupplier int getAsInt() 无参数 int
LongSupplier long getAsLong() 无参数 long
DoubleSupplier double getAsDouble() 无参数 double

4、Predicate

根据接收参数进行断言,返回boolean类型

接口 方法 参数类型 返回值
Predicate< T> boolean test(T t) T boolean
IntPredicate boolean test(int value) int boolean
LongPredicate boolean test(long value) long boolean
DoublePredicate boolean test(double value) double boolean
BiPredicate<T,U> boolean test(T t, U u) T,U boolean
发布了148 篇原创文章 · 获赞 159 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/qq_33594101/article/details/105197931