前言
函數式接口(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 |