作者:???Mohamed?Sanaulla??譯者:?李璟(jlee381344197@gmail.com)
早先我寫了一篇《函數(shù)式接口》,探討了Java8中函數(shù)式接口的用法。如果你正在瀏覽Java8的API,你會發(fā)現(xiàn)java.util.function中?Function,?Supplier,?Consumer,?Predicate和其他函數(shù)式接口廣泛用在支持lambda表達式的API中。這些接口有一個抽象方法,會被lambda表達式的定義所覆蓋。在這篇文章中,我會簡單描述Function接口,該接口目前已發(fā)布在java.util.function中。
Function接口的主要方法:
R?apply(T?t)?–?將Function對象應用到輸入的參數(shù)上,然后返回計算結(jié)果。
default??V??Function?T,V??–?將兩個Function整合,并返回一個能夠執(zhí)行兩個Function對象功能的Function對象。
譯者注:Function接口中除了apply()之外全部接口如下:
default?<V>?Function<T,V>?andThen(Function<??super?R,??extends?V>?after)?返回一個先執(zhí)行當前函數(shù)對象apply方法再執(zhí)行after函數(shù)對象apply方法的函數(shù)對象。
default?<V>?Function<T,V>?compose(Function<??super?V,??extends?T>?before)返回一個先執(zhí)行before函數(shù)對象apply方法再執(zhí)行當前函數(shù)對象apply方法的函數(shù)對象。
static?<T>?Function<T,T>?identity()?返回一個執(zhí)行了apply()方法之后只會返回輸入?yún)?shù)的函數(shù)對象。
本章節(jié)將會通過創(chuàng)建接受Function接口和參數(shù)并調(diào)用相應方法的例子探討apply方法的使用。我們同樣能夠看到API的調(diào)用者如何利用lambda表達式替代接口的實現(xiàn)。除了傳遞lambda表達式之外,API使用者同樣可以傳遞方法的引用,但這樣的例子不在本篇文章中。
如果你想把接受一些輸入?yún)?shù)并將對輸入?yún)?shù)處理過后的結(jié)果返回的功能封裝到一個方法內(nèi),Function接口是一個不錯的選擇。輸入的參數(shù)類型和輸出的結(jié)果類型可以一致或者不一致。
一起來看看接受Function接口實現(xiàn)作為參數(shù)的方法的例子:
| 01 | public?class?FunctionDemo?{ |
| 03 | ????//API?which?accepts?an?implementation?of |
| 05 | ????//Function?interface |
| 07 | ????static?void?modifyTheValue(int?valueToBeOperated, Function<Integer,?Integer>?function){ |
| 09 | ????????int?newValue?=?function.apply(valueToBeOperated); |
| 12 | ?????????*?Do?some?operations?using?the?new?value.????? |
| 15 | ????????System.out.println(newValue); |
下面是調(diào)用上述方法的例子:
| 01 | public?static?void?main(String[]?args)?{ |
| 03 | ????int?incr?=?20;??int?myNumber?=?10; |
| 05 | ????modifyTheValue(myNumber,?val->?val?+?incr); |
| 07 | ????myNumber?=?15;??modifyTheValue(myNumber,?val->?val?*?10); |
| 09 | ????modifyTheValue(myNumber,?val->?val?-?100); |
| 11 | ????modifyTheValue(myNumber,?val->?"somestring".length()?+?val?-?100); |
你可以看到,接受1個參數(shù)并返回執(zhí)行結(jié)果的lambda表達式創(chuàng)建在例子中。這個例子的輸入如下:
與50位技術專家面對面20年技術見證,附贈技術全景圖
總結(jié)
以上是生活随笔為你收集整理的Function接口 – Java8中java.util.function包下的函数式接口的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。