国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Lambda表達式和函數式接口

2019-11-08 03:26:44
字體:
來源:轉載
供稿:網友

Lambda表達式產生的原因

java是一門面向對象的語言,面向對象的語言使用帶有方法的對象封裝行為,而函數式編程使用函數封裝行為,Java的對象一般比較重量級。當實例化一個對象時往往涉及到初始化他用到的其他字段和方法以及類。為了對那些只在調用處使用一次的方法提供一種輕量級的封裝,Java的Lambda出生了。在沒有Lambda表達式的時候我們一般使用匿名內部類來處理這種需求,但是匿名內部類有以下不足 1. 語法不簡潔 2. 匿名內部類的this和變量名容易讓人產生誤解 3. 類載入和實例創建語句不夠靈活 4. 無法獲取非final的局部變量 5. 無法對控制流進行抽象

函數式接口

我們把只有一個方法的接口叫做函數式接口。函數式接口不需要加任何額外的東西,編譯器會自動判斷(判斷過程并非簡單的對接口方法計數:一個接口可能冗余的定義了一個Object已經提供的方法,比如toString(),或者定義了靜態方法或默認方法,這些都不屬于函數式接口方法的范疇)。也可以通過@FunctionalInterface注解來顯式指定一個接口是函數式接口。我們現在的類庫有很多是函數式接口的,就可以直接使用lamdba表達式。 - Java8增加了一個新包,java.util.function,它里面包含了常用的函數式接口 1. PRedicate——接收T對象并返回boolean 2. Consumer——接收T對象,不返回值 3. Supplier——提供T對象(例如工廠),不接收值 4. UnaryOperator——接收T對象,返回T對象 5. BinaryOperator——接收兩個T對象,返回T對象

public static void hasDoneLambda(){ // Function<T, R> -T作為輸入,返回的R作為輸出 Function<String,String> function=(x)->{ return "function"+x; }; System.out.println(function.apply("舒莉")); //Predicate<T> -T作為輸入,返回的boolean值作為輸出 Predicate<String> predicate=(s)->{ System.out.println(s); return false; }; predicate.test("hello world"); //Consumer<T> - T作為輸入,執行某種動作但沒有返回值 Consumer<String> consumer=(s)->{ System.out.println(s); }; consumer.accept("shuli"); //Supplier<T> - 沒有任何輸入,返回T Supplier<String> supp = () -> {return "Supplier";}; System.out.println(supp.get()); //BinaryOperator<T> -兩個T作為輸入,返回一個T作為輸出,對于“reduce”操作很有用 BinaryOperator<String> bina = (x,y) ->{System.out.print(x+" "+y);return "BinaryOperator";}; System.out.println(" "+bina.apply("hello ","world")); }

自定義函數式接口

package lambda;@FunctionalInterfacepublic interface StringConvertInteger<S,T> { T convert(S s);}

函數式接口轉Lambda表達式

public static void main(String[] args) { //用函數塊實現方法 StringConvertInteger<String,Integer> stringConvertInteger=(s)->{ Integer result=Integer.valueOf(s); System.out.println(result); return result; }; //調用 stringConvertInteger.convert("123"); }

注:

泛型類型是必須指定的,編譯器根據他們推斷出方法的傳入參數類型和返回值類型。函數塊類可以調用類的成員變量和局部變量,編譯器會自動把類的成員變量和局部變量轉成final類型的,如果類的成員變量和局部變量值發生了變化,編譯器無法推斷他是final類型的調用就會出錯。

總結

Lambda表達式主要由4部分組成 1. 函數式接口 2. 參數列表 3. 符號-> 4. 函數體。

引用:http://www.cnblogs.com/figure9/archive/2014/10/24/4048421.html


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 安化县| 闻喜县| 望江县| 高唐县| 论坛| 台南市| 贡觉县| 阜城县| 祁东县| 来安县| 读书| 邹城市| 呼和浩特市| 图们市| 怀集县| 沅江市| 女性| 云浮市| 伊吾县| 长葛市| 石阡县| 崇礼县| 黔东| 贵南县| 桂东县| 会理县| 尤溪县| 禹州市| 修武县| 东乡族自治县| 巴林左旗| 鱼台县| 铁岭市| 香港 | 黎城县| 汉寿县| 临泽县| 静安区| 岳阳县| 景洪市| 五原县|