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

您的位置:首頁技術(shù)文章
文章詳情頁

簡單易懂的java8新特性之lambda表達(dá)式知識(shí)總結(jié)

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

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

public interface Printer {//有一個(gè)需要實(shí)現(xiàn)的方法,可以使用Lambda表達(dá)式void print();}

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

public interface Printer {//有一個(gè)需要實(shí)現(xiàn)的方法,可以使用Lambda表達(dá)式void print();//這里雖然有一個(gè)需要實(shí)現(xiàn)的方法,但不是必須要實(shí)現(xiàn)的,因?yàn)閠oString()是Object類中的.String toString();}

public interface Printer {//有一個(gè)需要實(shí)現(xiàn)的方法,可以使用Lambda表達(dá)式void print();//這里雖然有一個(gè)需要實(shí)現(xiàn)的方法,但不是必須要實(shí)現(xiàn)的,因?yàn)閠oString()是Object類中的.String toString();}

像這種只有一個(gè)必須要實(shí)現(xiàn)的方法的接口,在java8中稱之為函數(shù)式接口,在定義接口時(shí)可以在接口名上方加上@FunctionInterface標(biāo)簽,用于驗(yàn)證此接口是否為函數(shù)式接口。如果這個(gè)接口定義好之后不是函數(shù)式接口,那么接口名處會(huì)報(bào)錯(cuò)。在使用Lambda表達(dá)式的時(shí)候,不需要關(guān)注方法名,只需要關(guān)注方法參數(shù)和返回值即可。基本語法很簡單:

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

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

2.1 實(shí)現(xiàn)類

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');}

比較上文三種實(shí)現(xiàn)方式,很顯示Lambda的實(shí)現(xiàn)比前兩種簡單很多。

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

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

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

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

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

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

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

在實(shí)現(xiàn)一個(gè)接口的方法時(shí),如果現(xiàn)有的其他地方的某個(gè)函數(shù)已經(jīng)實(shí)現(xiàn)了接口方法的邏輯,可以使用方法引用直接將這個(gè)邏輯引用過來。

4.1 靜態(tài)方法引用

語法:

接口名 變量名 = 類 ::已實(shí)現(xiàn)的方法

注意事項(xiàng):

在引用的方法后面,不要添加小括號(hào) 引用的這個(gè)方法,參數(shù)和返回值,必須要跟接口中定義的一致

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

@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 非靜態(tài)方法引用

語法:

接口名 變量名 = 對(duì)象 ::靜態(tài)方法

注意事項(xiàng):

在引用的方法后面,不要添加小括號(hào) 引用的這個(gè)方法,參數(shù)和返回值,必須要跟接口中定義的一致

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

@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;//必須用對(duì)象來引用System.out.println(p1.print(true, true));}}4.3 構(gòu)造方法的引用

如果一個(gè)函數(shù)式接口中定義的方法僅僅是為了得到一個(gè)對(duì)象,此時(shí)我們就可以使用構(gòu)造方法的引用,簡化這個(gè)方法的實(shí)現(xiàn)語法:

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

注意事項(xiàng):可以通過接口中的方法參數(shù),區(qū)分引用不同的構(gòu)造方法示例:

@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) {//引用無參構(gòu)造方法Printer1 p1 = Checker::new;p1.getCheck();//引用有參構(gòu)造方法Printer2 p2 = Checker::new;p2.getCheck(1);}}4.4 對(duì)象方法的特殊引用

如果實(shí)現(xiàn)某些接口的時(shí)候,Lambda表達(dá)式中包含了某一個(gè)對(duì)象,此時(shí)方法體中,直接使用這個(gè)對(duì)象調(diào)用它的某一個(gè)方法就可以完成整個(gè)的邏輯。其他的參數(shù),可以作為調(diào)用方法的參數(shù)。此時(shí),可以對(duì)這種實(shí)現(xiàn)進(jìn)行簡化。示例:

@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表達(dá)式Printer1 p1 = x -> x.getTimes();System.out.println(p1.getCheck(checker));//測(cè)試// 簡化之后Printer1 p11 = Checker::getTimes;System.out.println(p11.getCheck(checker));//測(cè)試// 沒有簡化前,按照之前的方法使用lambda表達(dá)式Printer2 p2 = (x,y)-> x.setTimes(y);p2.setCheck(checker, 50);System.out.println(checker.getTimes());//測(cè)試// 簡化之后Printer2 p22 = Checker::setTimes;p22.setCheck(checker, 30);System.out.println(checker.getTimes());//測(cè)試}}五、注意

當(dāng)在Lambda表達(dá)式中使用了某一個(gè)局部變量,那么這個(gè)局部變量的值在Lambda表達(dá)式之外,不可以被改變,因?yàn)槟J(rèn)將其定義成final常量。但全局變量變量沒有這方面的限制。示例:

@FunctionalInterfacepublic interface Printer {void setTime();}public class Tester {public static void main(String[] args) {int time = 10;Printer p = () -> System.out.println(time);//這里出錯(cuò)了,因?yàn)橄乱恍袑?duì)time進(jìn)行修改time = 15;//這里的值不能改變,會(huì)導(dǎo)致上一行出錯(cuò)}}

基本概括了Lambda表達(dá)式的所有用法,不足之處,請(qǐng)諒解,謝謝!

到此這篇關(guān)于簡單易懂的java8新特性之lambda表達(dá)式知識(shí)總結(jié)的文章就介紹到這了,更多相關(guān)java lambda表達(dá)式內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美一级网站| 精品视频一区二区三区四区五区 | 国产精品亚洲一区二区在线观看| 日韩精品欧美大片| 97se亚洲| 国产激情久久| 久久影院资源站| 免费观看亚洲| 久久影视一区| 国产精品丝袜xxxxxxx| 中文一区一区三区免费在线观 | 欧美日韩国产免费观看| 亚洲福利一区| 蜜桃视频一区二区三区| 欧美偷窥清纯综合图区| 久久一区国产| av高清不卡| 99视频精品全部免费在线视频| 亚洲午夜黄色| 丝袜亚洲另类欧美| 国产精品久久久久久妇女| 国产suv精品一区| 精品在线99| 天堂va在线高清一区| 麻豆精品蜜桃视频网站| 人人精品亚洲| 日韩精品a在线观看91| 国产精品成久久久久| 国产一区二区三区成人欧美日韩在线观看| 欧美三级网址| 另类av一区二区| 久久爱www.| 欧美亚洲激情| 日韩av黄色在线| 999国产精品永久免费视频app| 免费人成在线不卡| 久草精品视频| 中文字幕乱码亚洲无线精品一区| 麻豆91精品视频| 国产精品7m凸凹视频分类| 日韩福利在线观看| 久久婷婷av| 久久狠狠久久| 欧美.日韩.国产.一区.二区| 国产日韩欧美一区二区三区在线观看| 精品久久视频| 中文字幕亚洲影视| 日韩免费av| 国产欧美在线| 日韩专区一卡二卡| 免费视频最近日韩| 久久精品亚洲欧美日韩精品中文字幕| 欧美亚洲一区二区三区| 国产一区亚洲| 欧美精品97| 亚洲免费毛片| 自由日本语亚洲人高潮| 精品亚洲a∨一区二区三区18| 丝袜美腿成人在线| 久久久久91| 久久99久久人婷婷精品综合| 国产亚洲综合精品| 日韩成人精品一区二区| 日韩国产在线不卡视频| 亚洲视频www| 日韩国产欧美| 欧美黄页在线免费观看| 亚洲精品精选| 亚洲欧美视频| 欧美一区三区| 久久久久久夜| 你懂的国产精品| 日本不卡一二三区黄网| 亚洲少妇诱惑| 蜜臀av免费一区二区三区| 免费亚洲婷婷| 日韩1区2区3区| 久久高清免费观看| 欧洲激情综合| 久久久蜜桃一区二区人| 国产 日韩 欧美 综合 一区 | 91精品蜜臀一区二区三区在线| 日韩av不卡一区二区| 午夜一级在线看亚洲| 91精品亚洲| 日韩欧美字幕| 精品国产a一区二区三区v免费| 久久国产精品免费一区二区三区| 免费高清在线一区| 香蕉精品999视频一区二区| 亚洲高清久久| 91精品国产调教在线观看| 精品丝袜在线| 久久久久久久久丰满| 亚洲91久久| 99久久激情| 欧美一级精品| 狠狠爱成人网| 老牛国产精品一区的观看方式| 日韩中文字幕不卡| 亚洲无线观看| 日韩激情综合| 国产亚洲高清一区| 日韩av网站免费在线| 国产亚洲精品精品国产亚洲综合| 欧美天堂在线| 精品国产亚洲日本| 亚洲最新无码中文字幕久久| 免费福利视频一区二区三区| 国产精品99一区二区| 亚洲欧美不卡| 在线亚洲激情| 日韩国产欧美在线播放| 国产激情精品一区二区三区| 手机在线电影一区| 久久一区二区中文字幕| 日韩天堂av| 日韩中文av| 国产日韩欧美一区二区三区| 美女久久99| 日韩精品水蜜桃| 久久高清免费观看| 国产视频一区二区在线播放| 黄色网一区二区| 久久久久久免费视频| 男女男精品视频网| 欧美天堂在线| 欧美日韩视频网站| 亚洲视频国产精品| 国产乱子精品一区二区在线观看 | 久久国产日韩欧美精品| 日本一区二区免费高清| 激情久久久久久| 日韩中文av| 日韩av有码| 免播放器亚洲| 国产欧美一区二区三区米奇| 日韩成人高清| 少妇精品久久久一区二区| 麻豆视频久久| 婷婷综合在线| 国产精品探花在线观看| 久久在线视频免费观看| 午夜性色一区二区三区免费视频| 日韩精品亚洲aⅴ在线影院| 国产伊人久久| 一区二区三区国产在线| 91日韩免费| 亚洲另类av| 福利在线免费视频| 亚洲精品一区二区在线播放∴| 福利一区在线| 蜜臀精品久久久久久蜜臀| 国产在线不卡一区二区三区| 国产视频一区欧美| 国产不卡av一区二区| 亚洲香蕉久久| 成人日韩在线观看| 青青国产91久久久久久| 日韩久久视频| 国产欧美成人| 国产模特精品视频久久久久| 精品美女在线视频| 亚洲精品日本| 亚洲国产一区二区三区在线播放| 国产精品久久久久久久久免费高清 | 国产精品久久| 亚洲欧洲一区二区天堂久久| 欧美黄色一区二区| 免费成人在线影院| 久久国产亚洲精品| 国产欧美自拍一区| 免费高清在线一区| 亚洲91久久| 另类综合日韩欧美亚洲| 亚洲精品伊人| 91超碰国产精品| 精品国产成人| 欧美日韩一区二区三区不卡视频 | 蜜臀久久99精品久久久久久9| 国模大尺度视频一区二区| 蜜桃久久精品一区二区| 日韩精品专区| 国产精品中文字幕制服诱惑| 国产亚洲精品久久久久婷婷瑜伽| 久久影院资源站| 日韩激情一二三区| 99亚洲精品| 日韩影院在线观看| 亚洲h色精品| 日韩成人a**站| 亚洲精品福利| 午夜亚洲福利在线老司机| 欧美日韩中文一区二区| 精品视频自拍| 国产欧美69| 日韩欧美三区| 石原莉奈一区二区三区在线观看| 激情综合激情| 久久久久免费av|