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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章