Function
接口?interface Function<T, R>
,它表明這樣的一個函數,接受一個參數,而後返回一個結果。segmentfault
Function
接口的functional
方法R apply(T t)
表示,接受一個類型爲T
的參數t,返回一個類型爲R
的結果。注意:app
T
和R
能夠是同一種類型,固然也能夠是不一樣的類型。那麼問題來了,我有兩個、三個參數怎麼辦?函數
BiFunction
接口?interface BiFunction<T, U, R>
,從名字上你們應該就能推斷出來,它表明這樣的一個函數,接受兩個參數,而後返回一個結果。code
BiFunction
接口的functional
方法R apply(T t, U u);
表示,接受兩個參數t和u,類型分別爲T
和U
的,返回一個類型爲R
的結果。注意:接口
T
、U
和R
能夠是同一種類型,固然也能夠是不一樣的類型。如今我們再來看上面的問題,三個參數的時候怎麼辦?function
包下並無這樣的接口,因此咯,本身動手豐衣足食:ip
public interface TripleFunction<T, U, M, R> { R apply(T t, U u, M m); }
function
包還很貼心地爲咱們提供了不少經常使用的functional
接口,其中很大一部分就是和原始類型
(Primitive Type
)有關的。一旦掌握了其中的規律,能夠達到觸類旁通、事半功倍的效果。下面就跟着彬哥一塊兒來看看吧。ci
做爲參數
的原始類型來劃分DoubleFunction
,接受一個類型爲double
的參數,返回一個結果。get
@FunctionalInterface public interface DoubleFunction<R> { R apply(double value); }
IntFunction
,接受一個類型爲int
的參數,返回一個結果。it
@FunctionalInterface public interface IntFunction<R> { R apply(int value); }
LongFunction
,接受一個類型爲long
的參數,返回一個結果。io
@FunctionalInterface public interface LongFunction<R> { R apply(long value); }
做爲返回值
的原始類型來劃分ToDoubleFunction
,接受一個參數,返回一個類型爲double
的結果。
@FunctionalInterface public interface ToDoubleFunction<R> { double applyAsDouble(T value); }
ToIntFunction
,接受一個參數,返回一個類型爲int
的結果。
@FunctionalInterface public interface ToIntFunction<R> { int applyAsInt(T value); }
ToLongFunction
,接受一個參數,返回一個類型爲long
的結果。
@FunctionalInterface public interface ToLongFunction<R> { long applyAsLong(T value); }
3個做爲參數的和3個做爲返回值的相互組合、去掉重複的
嗯,又Get到6種functional接口:
DoubleToIntFunction
,DoubleToLongFunction
,IntToDoubleFunction
,IntToLongFunction
,LongToDoubleFunction
,LongToIntFunction
。
剛剛我們劃分出來的這個12個functional接口都是和Function
相關的(一元),那function
包有沒有給咱們提供其餘和BiFunction
相關的functional接口呢?
固然有。
那我們就來看看這些二元的functional接口吧。
ToDoubleBiFunction
,接受兩個參數,返回一個類型爲double
的結果。
@FunctionalInterface public interface ToDoubleBiFunction<R> { double applyAsDouble(T t, U u); }
ToIntBiFunction
,接受兩個參數,返回一個類型爲int
的結果。
@FunctionalInterface public interface ToIntBiFunction<R> { int applyAsInt(T t, U u); }
ToLongBiFunction
,接受兩個參數,返回一個類型爲long
的結果。
@FunctionalInterface public interface ToLongBiFunction<R> { long applyAsLong(T t, U u); }
彬哥,這些只是做爲返回值的接口,按照上面一元function的劃分,那做爲參數
和相互轉化
的二元接口呢?
那些啊,funciton
包就並無提供了,一來不經常使用,二來啊,通過彬哥的介紹,相信你已經掌握規律了,很容易就寫出來了吧?那就做爲課後做業如何?
這一講,我們主要介紹了Function
相關的functional接口,按大的方面能夠以一元和二元來分類;再細分的話,能夠按原始類型做爲參數
、做爲返回值
和參數返回值相互轉化
的類別來劃分。
另外呀,能夠用function包概述及大綱做爲參考手冊來回顧和查詢。