日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Function接口 – Java8中java.util.function包下的函数式接口

發(fā)布時間:2025/3/18 java 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Function接口 – Java8中java.util.function包下的函数式接口 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

作者:???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?{
02?
03 ????//API?which?accepts?an?implementation?of
04?
05 ????//Function?interface
06?
07 ????static?void?modifyTheValue(int?valueToBeOperated, Function<Integer,?Integer>?function){
08?
09 ????????int?newValue?=?function.apply(valueToBeOperated);
10?
11 ????????/*?????
12 ?????????*?Do?some?operations?using?the?new?value.?????
13 ?????????*/
14?
15 ????????System.out.println(newValue);
16?
17 ????}
18?
19}

下面是調(diào)用上述方法的例子:


01 public?static?void?main(String[]?args)?{
02?
03 ????int?incr?=?20;??int?myNumber?=?10;
04?
05 ????modifyTheValue(myNumber,?val->?val?+?incr);
06?
07 ????myNumber?=?15;??modifyTheValue(myNumber,?val->?val?*?10);
08?
09 ????modifyTheValue(myNumber,?val->?val?-?100);
10?
11 ????modifyTheValue(myNumber,?val->?"somestring".length()?+?val?-?100);
12?
13}

你可以看到,接受1個參數(shù)并返回執(zhí)行結(jié)果的lambda表達式創(chuàng)建在例子中。這個例子的輸入如下:


130
2?
3150
4?
5 -85
6?
7 -75
與50位技術專家面對面20年技術見證,附贈技術全景圖

總結(jié)

以上是生活随笔為你收集整理的Function接口 – Java8中java.util.function包下的函数式接口的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。