這篇文章將為大家詳細(xì)講解有關(guān)java中Lambda表達(dá)式的用法,文章內(nèi)容質(zhì)量較高,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
成都創(chuàng)新互聯(lián)公司服務(wù)項(xiàng)目包括大寧網(wǎng)站建設(shè)、大寧網(wǎng)站制作、大寧網(wǎng)頁制作以及大寧網(wǎng)絡(luò)營(yíng)銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,大寧網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到大寧省份的部分城市,未來相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
什么是lambda表達(dá)式?
lambda表達(dá)式是一個(gè)可傳遞的代碼塊,可以在后面執(zhí)行一次或多次。我們可以將lambda表達(dá)式定義為一種簡(jiǎn)潔、可傳遞的匿名函數(shù),先我們需要明確lambda表達(dá)式本質(zhì)上是一個(gè)函數(shù),雖然它不屬于某個(gè)特定的類,但具備參數(shù)列表、函數(shù)主體、返回類型,以及能夠拋出異常;其次它是匿名的,lambda表達(dá)式?jīng)]有具體的函數(shù)名稱;lambda表達(dá)式可以像參數(shù)一樣進(jìn)行傳遞,從而極大的簡(jiǎn)化代碼的編寫。
例如:
class action implements ActionListener{ @Override public void actionPerformed(ActionEvent e){ System.out.println("now time is"+new Date()); Toolkit.getDefaultToolkit().beep(); } } public class Main{ public static void main(String[] args){ action a=new action(); Timer timer=new Timer(2000,a); timer.start(); JOptionPane.showMessageDialog(null, "is quit?"); //這個(gè)窗口用于防止main線程執(zhí)行完畢直接結(jié)束 } }
這個(gè)代碼中action類的a對(duì)象實(shí)際上只是作為一個(gè)代碼段傳給了Timer的構(gòu)造器,因?yàn)閖ava是基于面對(duì)對(duì)象思想的語言,所以沒有函數(shù)調(diào)用,沒有代碼段的傳遞,所以必須把所需代碼封裝在一個(gè)類中,上文即action類。有了lambda表達(dá)式之后可以讓代碼更簡(jiǎn)潔。
上文用lambda表示如下:
public class Main{ public static void main(String[] args){ Timer timer=new Timer(2000,(ActionEvent e)->{ System.out.println("now the time is"+new Date()); Toolkit.getDefaultToolkit().beep(); }); timer.start(); //結(jié)束 } }
用了lambda表達(dá)式是不是代碼可以變得很簡(jiǎn)潔,如果e 的類型能通過下文推導(dǎo)得出那么可以省略參數(shù)類型,如果只有一個(gè)參數(shù)還可以省略括號(hào),如下:
e->{ System.out.println(“now the time is”+new Date()); Toolkit.getDefaultToolkit().beep(); }
這個(gè)lambda表達(dá)式又可以等價(jià)于:
ActionListener al=e->{ System.out.println(“now the time is”+new Date()); Toolkit.getDefaultToolkit().beep(); }
然后把a(bǔ)l 扔進(jìn)Timer構(gòu)造器中。
ActionListener 作為一個(gè)接口,它只有一個(gè)抽象方法,這是作為函數(shù)式接口必須滿足的條件,函數(shù)式接口都能寫成lambda表達(dá)式。
再實(shí)現(xiàn)一個(gè)String數(shù)組 按照長(zhǎng)度排序的代碼,便于理解:
public class Main{ public static void main(String[] args){ String[] con=new String[]{"apple","cat","bannane","foot","do"}; Arrays.sort(con,(str1,str2)->str1.length()-str2.length()); //第一種實(shí)現(xiàn) 這兒因?yàn)橹苯臃祷刂邓詻]有加"{"和"}"所以也不用加";" 上下文能推斷出這是String類型參數(shù), //所以不用加參數(shù)類型 Comparatorcompare = (str1,str2)->s1.length()-s2.length(); Arrays.sort(con,compare);//第二種實(shí)現(xiàn),還可以采用寫一個(gè)類實(shí)現(xiàn)Comparator中的compare方法 //如: com com1=new com(); Arrays.sort(con.com1);//其本質(zhì)都是傳遞一段代碼 } class com implements Compartor { @Override public void compare(String str1,String str2){ return str1.length()-str2.length(); } } }
以上就是java中Lambda表達(dá)式的用法,看完之后是否有所收獲呢?如果想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊,感謝各位的閱讀。