日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

簡單易懂的java8新特性之lambda表達式知識總結

瀏覽:177日期:2022-08-12 08:16:55
目錄一、概念二、用法比較2.1 實現類2.2 匿名類2.3 Lambda三、基本用法3.1 無參數無返回值接口方法3.2 一個參數無返回值接口方法3.3 多個參數無返回值接口方法3.4 無參數有返回值接口方法3.5 一個參數有返回值接口方法3.6 多個參數有返回值接口方法四、函數引用4.1 靜態方法引用4.2 非靜態方法引用4.3 構造方法的引用4.4 對象方法的特殊引用五、注意一、概念

從本質上來說,它就是一個匿名函數,可以用來直接實現接口中的方法,從而簡化代碼。但是Lambda有一個限制,不能實現接口中的所有方法,所以Lambda表達式只能用于有且僅有一個必須需要實現的方法接口,這里需要注意必須需要實現這六個字。

public interface Printer {//有一個需要實現的方法,可以使用Lambda表達式void print();}

public interface Printer {//有一個需要實現的方法,可以使用Lambda表達式void print();//這里雖然有一個方法,但接口提供了默認實現,因此不是必須要實現的default void printDetail(){}}

public interface Printer {//有一個需要實現的方法,可以使用Lambda表達式void print();//這里雖然有一個需要實現的方法,但不是必須要實現的,因為toString()是Object類中的.String toString();}

public interface Printer {//有一個需要實現的方法,可以使用Lambda表達式void print();//這里雖然有一個需要實現的方法,但不是必須要實現的,因為toString()是Object類中的.String toString();}

像這種只有一個必須要實現的方法的接口,在java8中稱之為函數式接口,在定義接口時可以在接口名上方加上@FunctionInterface標簽,用于驗證此接口是否為函數式接口。如果這個接口定義好之后不是函數式接口,那么接口名處會報錯。在使用Lambda表達式的時候,不需要關注方法名,只需要關注方法參數和返回值即可。基本語法很簡單:

(參數列表)->{方法體};二、用法比較

java中實現接口的方式在java8之前有兩種:定義接口的實現類,使用匿名類,但Lambda表達式相比于這種方法都簡單很多。以上文的Printer接口為例,實現如下:

2.1 實現類

class PrinterImpl implements Printer{@Overridepublic void print() {System.out.println('Hello World');}}2.2 匿名類

class PrinterAnonymous {Printer printer = new Printer() {@Overridepublic void print() {System.out.println('Hello World');}};}2.3 Lambda

class PrinterLambda{Printer p = ()-> System.out.println('Hello World');}

比較上文三種實現方式,很顯示Lambda的實現比前兩種簡單很多。

三、基本用法3.1 無參數無返回值接口方法

@FunctionalInterfacepublic interface Printer {void print();}public class Tester {public static void main(String[] args) {// 方法一,無返回值的情況,方法體只有一條語句,可以省略大括號Printer p1 = () -> System.out.println('Hello World 1');p1.print();// 方法二,標準定義Printer p2 = () -> {System.out.println('Hello World 2');};p2.print();}}3.2 一個參數無返回值接口方法

@FunctionalInterfacepublic interface Printer {void print(String str);}public class Tester {public static void main(String[] args) {// 方法一,無返回值的情況,方法體只有一條語句,可以省略大括號//因為這里只有一個參數,小括號也可以省略,小括號省略的前提是:有且僅有一個參數//Printer p1 = s -> System.out.println(s);Printer p1 = (s) -> System.out.println(s);p1.print('Hello World 1');// 方法二,無返回值的情況,方法體只有一條語句,可以省略大括號Printer p2 = (String s) -> System.out.println(s);p2.print('Hello World 2');// 方法三,標準定義Printer p3 = (String s) -> {System.out.println(s);};p3.print('Hello World 3');}}3.3 多個參數無返回值接口方法

@FunctionalInterfacepublic interface Printer {void print(String str1,String str2);}public class Tester {public static void main(String[] args) {// 方法一,無返回值的情況,方法體只有一條語句,可以省略大括號//參Printer p1 = (s1,s2) -> System.out.println(s1+' '+s2);p1.print('Hello World 1','Java 1');// 方法二,無返回值的情況,方法體只有一條語句,可以省略大括號Printer p2 = (String s1,String s2) -> System.out.println(s1+' '+s2);p2.print('Hello World 2','Java 2');// 方法三,標準定義Printer p3 = (String s1,String s2) -> {System.out.println(s1+' '+s2);};p3.print('Hello World 3','Java 3');}}3.4 無參數有返回值接口方法

@FunctionalInterfacepublic interface Printer {boolean print();}public class Tester {public static void main(String[] args) {// 方法一,有返回值的情況,只有一條語句,return關鍵字的有無決定能否活力大括號Printer p1 = () -> true;boolean has1 = p1.print();System.out.println(has1);//測試返回結果// 方法二,標準定義Printer p2 = () -> {return true;};boolean has2 = p2.print();System.out.println(has2);//測試返回結果}}3.5 一個參數有返回值接口方法

@FunctionalInterfacepublic interface Printer {boolean print(boolean good);}public class Tester {public static void main(String[] args) {// 方法一,有返回值的情況,只有一條語句,return關鍵字的有無決定能否活力大括號 //因為這里只有一個參數,小括號也可以省略,小括號省略的前提是:有且僅有一個參數 //Printer p1 = good -> good;Printer p1 = (good) -> good;boolean has1 = p1.print(true);System.out.println(has1);// 方法二,標準定義Printer p2 = (good) -> {return good;};boolean has2 = p2.print(false);System.out.println(has2);}}3.6 多個參數有返回值接口方法

@FunctionalInterfacepublic interface Printer {boolean print(boolean good1,boolean good2);}public class Tester {public static void main(String[] args) {// 方法一,有返回值的情況,只有一條語句,return關鍵字的有無決定能否活力大括號Printer p1 = (good1,good2) -> good1;boolean has1 = p1.print(true,false);System.out.println(has1);// 方法二,標準定義Printer p2 = (good1,good2) -> {return good1;};boolean has2 = p2.print(false,false);System.out.println(has2);}}四、函數引用

在實現一個接口的方法時,如果現有的其他地方的某個函數已經實現了接口方法的邏輯,可以使用方法引用直接將這個邏輯引用過來。

4.1 靜態方法引用

語法:

接口名 變量名 = 類 ::已實現的方法

注意事項:

在引用的方法后面,不要添加小括號 引用的這個方法,參數和返回值,必須要跟接口中定義的一致

示例:Printer 需要實現的方法在Checker中有同樣的實現,這樣就可以直接引用過來

@FunctionalInterfacepublic interface Printer {String print(boolean good1,boolean good2);}public class Checker {public static String check(boolean a,boolean b) {if(a && b) {return 'Java is good';}else if (!a && b) {return 'Java is better';}return 'Java is best';}}public class Tester {public static void main(String[] args) {Printer p1 = Checker::check;//用類名來引用System.out.println(p1.print(true, true));}}4.2 非靜態方法引用

語法:

接口名 變量名 = 對象 ::靜態方法

注意事項:

在引用的方法后面,不要添加小括號 引用的這個方法,參數和返回值,必須要跟接口中定義的一致

示例:Printer 需要實現的方法在Checker中有同樣的實現,這樣就可以直接引用過來

@FunctionalInterfacepublic interface Printer {String print(boolean good1,boolean good2);}public class Checker {public String check(boolean a,boolean b) {if(a && b) {return 'Java is good';}else if (!a && b) {return 'Java is better';}return 'Java is best';}}public class Tester {public static void main(String[] args) {Printer p1 = new Checker()::check;//必須用對象來引用System.out.println(p1.print(true, true));}}4.3 構造方法的引用

如果一個函數式接口中定義的方法僅僅是為了得到一個對象,此時我們就可以使用構造方法的引用,簡化這個方法的實現語法:

接口名 變量名 = 類名 ::new

注意事項:可以通過接口中的方法參數,區分引用不同的構造方法示例:

@FunctionalInterfacepublic interface Printer1 {Checker getCheck();}@FunctionalInterfacepublic interface Printer2 {Checker getCheck(int a);}public class Checker {int times;public Checker() {System.out.println('I am none parameter');}public Checker(int a) {System.out.println('I have one parameter');}}public class Tester {public static void main(String[] args) {//引用無參構造方法Printer1 p1 = Checker::new;p1.getCheck();//引用有參構造方法Printer2 p2 = Checker::new;p2.getCheck(1);}}4.4 對象方法的特殊引用

如果實現某些接口的時候,Lambda表達式中包含了某一個對象,此時方法體中,直接使用這個對象調用它的某一個方法就可以完成整個的邏輯。其他的參數,可以作為調用方法的參數。此時,可以對這種實現進行簡化。示例:

@FunctionalInterfacepublic interface Printer1 {int getCheck(Checker checker);}@FunctionalInterfacepublic interface Printer2 {void setCheck(Checker checker, int a);}public class Tester {public static void main(String[] args) {Checker checker = new Checker();checker.setTimes(100);// 沒有簡化前,按照之前的方法使用lambda表達式Printer1 p1 = x -> x.getTimes();System.out.println(p1.getCheck(checker));//測試// 簡化之后Printer1 p11 = Checker::getTimes;System.out.println(p11.getCheck(checker));//測試// 沒有簡化前,按照之前的方法使用lambda表達式Printer2 p2 = (x,y)-> x.setTimes(y);p2.setCheck(checker, 50);System.out.println(checker.getTimes());//測試// 簡化之后Printer2 p22 = Checker::setTimes;p22.setCheck(checker, 30);System.out.println(checker.getTimes());//測試}}五、注意

當在Lambda表達式中使用了某一個局部變量,那么這個局部變量的值在Lambda表達式之外,不可以被改變,因為默認將其定義成final常量。但全局變量變量沒有這方面的限制。示例:

@FunctionalInterfacepublic interface Printer {void setTime();}public class Tester {public static void main(String[] args) {int time = 10;Printer p = () -> System.out.println(time);//這里出錯了,因為下一行對time進行修改time = 15;//這里的值不能改變,會導致上一行出錯}}

基本概括了Lambda表達式的所有用法,不足之處,請諒解,謝謝!

到此這篇關于簡單易懂的java8新特性之lambda表達式知識總結的文章就介紹到這了,更多相關java lambda表達式內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
在线一区av| 亚洲高清二区| 日韩精品一卡二卡三卡四卡无卡| 久久久亚洲一区| 99精品综合| 欧美 日韩 国产精品免费观看| 精品国产亚洲一区二区三区| 国产亚洲精品美女久久 | 福利在线免费视频| 亚洲精品成人图区| 久久三级视频| 午夜国产精品视频| 色综合视频一区二区三区日韩| 日本国产一区| sm捆绑调教国产免费网站在线观看 | 99国内精品| 日韩精品免费观看视频| 97久久中文字幕| 黄色网一区二区| 亚洲二区视频| 国产亚洲欧美日韩在线观看一区二区| 激情综合五月| 亚洲欧美久久| 老色鬼精品视频在线观看播放| 丝袜美腿一区| 青青草伊人久久| 国产综合欧美| 久久精品国产免费| 在线日韩成人| 欧洲av不卡| 国产精品资源| 日韩精品一二三| 国产成人久久精品一区二区三区| 人人香蕉久久| 欧美日本二区| 欧美日韩国产综合网| 美女尤物国产一区| 中国女人久久久| 91欧美在线| 国产精品1区| 亚洲精品影院在线观看| 欧美日韩高清| 久久精品电影| а√天堂8资源在线| 国产精品视频首页| 亚洲色图网站| 国产精品婷婷| 日韩高清欧美| 精品久久久网| 久久精品系列| 久久精品国产久精国产| 国产精品久久久久久模特| 亚洲精品韩国| 久热精品在线| av不卡在线| 99亚洲精品| 视频一区中文字幕| 亚洲少妇一区| 一区福利视频| 午夜在线精品偷拍| 蜜臀久久久99精品久久久久久| 狠狠久久婷婷| 激情婷婷综合| 欧美日韩中文字幕一区二区三区| 福利视频一区| 日韩免费在线| 亚洲婷婷免费| 久久www成人_看片免费不卡| 视频一区二区不卡| 日本伊人久久| 国产精品第一国产精品| 久久一区精品| 久久国产免费| 免费观看日韩电影| 国产精品xvideos88| 波多野结衣久久精品| 激情欧美丁香| 亚洲精品美女91| 久久国内精品视频| 国产成人在线中文字幕| 在线一区免费| 欧美一级二级视频| a日韩av网址| 四虎精品一区二区免费| 国产91在线精品| 午夜亚洲一区| 成人在线免费观看网站| 五月天久久久| 国产精品亚洲人成在99www| 欧美sm一区| 亚州国产精品| 日韩一区二区在线免费| 日韩影院在线观看| 久久99国产精品视频| 99视频在线精品国自产拍免费观看| 国产精品亚洲欧美一级在线| 欧美日韩国产高清| 精品一区二区三区视频在线播放| 在线 亚洲欧美在线综合一区| 欧美激情福利| 亚洲1区在线观看| 久久精品不卡| 国产一区二区三区四区大秀 | 亚洲www啪成人一区二区| 亚洲精品免费观看| 91九色精品| 久久亚洲资源中文字| 亚洲精品伊人| 久久av在线| 亚洲欧洲一区二区天堂久久| 国产一区二区精品福利地址| 久久国产麻豆精品| 丝袜a∨在线一区二区三区不卡| 日韩天堂在线| 国产一区二区三区日韩精品| 国产视频一区二区在线播放| 日本大胆欧美人术艺术动态| 国产高清久久| 激情久久五月| 一本一道久久a久久精品蜜桃| 蜜臀久久精品| 精品一区二区三区亚洲| 国产三级一区| 国产精区一区二区| 欧美激情三区| 精品久久美女| 超级白嫩亚洲国产第一| 国产成人调教视频在线观看| 97人人精品| 日韩三区在线| 国产高清一区二区| 中文在线日韩| 日本视频一区二区| 久久国产尿小便嘘嘘| 久久精品国产久精国产| 天堂中文在线播放| 欧美不卡高清一区二区三区| 亚洲午夜黄色| 亚洲毛片视频| 另类欧美日韩国产在线| 日韩伦理在线一区| 狠狠爱成人网| 亚洲精品一区二区在线播放∴| 国产日韩中文在线中文字幕| 久久97视频| 久久中文字幕二区| 欧美日韩一区二区三区不卡视频| 精品入口麻豆88视频| 免费黄色成人| 欧美日本二区| 欧美一区久久久| 一区二区三区四区日韩| 欧美片网站免费| 亚洲成av在线| 欧美在线日韩| 五月婷婷六月综合| 免费日韩一区二区三区| 国产精品毛片一区二区三区| 欧美日韩va| 欧美日韩中文一区二区| 国产美女久久| 香蕉精品视频在线观看| 欧美精品97| 亚洲精品九九| 91精品蜜臀一区二区三区在线| 日韩av中文字幕一区| 1000部精品久久久久久久久| 日韩高清不卡在线| 狠狠干综合网| 色爱综合av| 红杏一区二区三区| 日韩av一级片| 先锋影音久久久| 日韩av免费| 国产精品国产一区| 日韩高清不卡在线| 日韩精品一级二级 | 日韩成人在线看| 中国女人久久久| 91亚洲国产成人久久精品| 日本电影久久久| 日本在线成人| 日本不卡一区二区| 免费在线观看不卡| 亚洲一区日本| 国产毛片久久| 91久久国产| 狠狠爱www人成狠狠爱综合网| 精品捆绑调教一区二区三区| 国产一区二区精品久| 精品福利久久久| 97精品一区二区| 丝袜av一区| 欧美日韩国产免费观看视频| 丝袜诱惑一区二区| 成人午夜国产| 欧美日韩国产免费观看| 日韩午夜免费| 一本一道久久a久久| 亚洲不卡视频|