這篇文章主要介紹了如何理解Java中的lambda表達式的相關(guān)知識,內(nèi)容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇如何理解Java中的lambda表達式文章都會有所收獲,下面我們一起來看看吧。
發(fā)展壯大離不開廣大客戶長期以來的信賴與支持,我們將始終秉承“誠信為本、服務(wù)至上”的服務(wù)理念,堅持“二合一”的優(yōu)良服務(wù)模式,真誠服務(wù)每家企業(yè),認真做好每個細節(jié),不斷完善自我,成就企業(yè),實現(xiàn)共贏。行業(yè)涉及成都餐廳設(shè)計等,在網(wǎng)站建設(shè)公司、成都全網(wǎng)營銷、WAP手機網(wǎng)站、VI設(shè)計、軟件開發(fā)等項目上具有豐富的設(shè)計經(jīng)驗。
Lambda表達式是JDK8開始后的一種新語法形式
作用:簡化匿名內(nèi)部類的代碼寫法
格式:
(匿名內(nèi)部類被重寫方法的形參列表)->{ 被重寫方法的方法體代碼 } 注:->是語法形式,無實際意義
首先我們先定義一個抽象類,通過匿名內(nèi)部類重寫其方法,再對其進行簡化,比較二者之間有何變化:
使用Lambda表達式之前:
public static void main (String[] args){ People p = new People(){ @Override public void run(){ System.out.println("小學生跑的很慢"); } }; p.run(); } abstract class People{ public abstract void run(); }使用Lambda表達式之后:
People p = ()->{ System.out.println("小學生跑的很慢"); }; //會出現(xiàn)報錯會出現(xiàn)報錯,這是為什么呢?原因在于前面對于Lambda表達式的定義并不清晰,Lambda表達式并不能簡化所有匿名內(nèi)部類,其只能簡化函數(shù)式接口匿名內(nèi)部類的寫法形式,且接口中有且僅有一個抽象方法,通常,我們會再接口上加上一個@Functionalinterface注解,標記該接口必須是滿足函數(shù)式接口。
真正意義上通過Lambda表達式簡化:
@FunctionalInterface//加上這個注解必須是函數(shù)式接口,且只有一個抽象方法 interface People{ void run(); } //簡化之前的匿名內(nèi)部類 People p = new People(){ @Override public void run(){ System.out.println("小學生跑的很慢!"); } }; //簡化之后 People p = () -> { System.out.println("小學生跑的很慢!"); };另外,也可以將其作為參數(shù)代入方法中去使用:
//在原來的基礎(chǔ)上定義一個pk方法 public static void pk(People p){ System.out.println("跑步情況如何:") p.run(); } //不使用Lambda的情況下: pk(p);//需要在定義匿名內(nèi)部類之后,將p代入; //使用Lambda的情況: People p = () -> { System.out.println("小學生跑的很慢!"); }; pk(() -> { System.out.println("小學生跑的很慢!"); }); //由于等號右邊即是People創(chuàng)建的對象p,因此可以可以直接將其代入
Lambda的好處:
Lambda是一個匿名函數(shù),我們可以把Lambda表達式理解為是一段可以傳遞的代碼,它可以寫出更簡潔、更靈活的代碼,作為一種更緊湊的代碼風格,使Java語言表達能力得到了提升。
在之前的學習過程中,我們學習過了Arrays的相關(guān)知識,其中有一個sort方法(可以將數(shù)組升序或降序排列),它其實也是接口類,并且只有一個抽象方法:
//精簡之前: Arrays.sort(grade,new Comparator<Integer>(){ @Override public int compare(Integer o1,Integer o2){ return o2 -o1; } }); //精簡之后: Arrays.sort(grade,(Integer o1,Integer o2) -> { return o2 -o1; });
參數(shù)類型可以省略不寫
//參考前面的實戰(zhàn)例子 Arrays.sort(grade,(Integer o1,Integer o2) -> { return o2 -o1; }); //省略參數(shù)類型之后 Arrays.sort(grade,( o1, o2){ return o2 -o1; });
如果只有一個參數(shù),參數(shù)類型可以省略,同時()也可以省略
//簡單引用一個單個參數(shù)的例子,不需要了解其具體含義 btn.addActionListener((ActionEvent e) -> { System.out.println("我是簡單的例子。"); }); //簡化之后: btn.addActionListener( e -> { System.out.println("我是簡單的例子。"); });
如果Lambda表達式的方法體代碼只有一行代碼??梢允÷源罄ㄌ柌粚?同時要省略分號
//參照上一條規(guī)則的例子 btn.addActionListener( e -> { System.out.println("我是簡單的例子。"); }); //簡化之后: btn.addActionListener( e -> System.out.println("我是簡單的例子。") );
如果Lambda表達式的方法體代碼只有一行代碼??梢允÷源罄ㄌ柌粚憽4藭r,如果這行代碼是return語句,必須省略return不寫,同時也必須省略";"不寫
//參照第一條規(guī)則的代碼 Arrays.sort(grade,(Integer o1,Integer o2) -> { return o2 -o1; }); //簡化之后: Arrays.sort(grade,( o1, o2)-> o2 -o1);
關(guān)于“如何理解Java中的lambda表達式”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對“如何理解Java中的lambda表達式”知識都有一定的了解,大家如果還想學習更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
當前題目:如何理解Java中的lambda表達式
URL分享:http://chinadenli.net/article18/joidgp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計、網(wǎng)頁設(shè)計公司、做網(wǎng)站、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站維護、用戶體驗
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)