花10分鐘認真的看完一篇文章,或許會有意想不到的收穫!
自從java8中引入了Lambda表達式之後,使用的人也越來越多了,這篇文章我們就來看看什麼是Lambda表達式。
廢話少說,先看定義!
01定義
Lambda表達式也被稱為箭頭函數,匿名函數,閉包Lambda表達式體現的是輕量級函數式編程思想『->』符號式Lambda表達式核心操作符號,符號左側是操作參數,符號右側是操作表達式
1、在定義中有一個比較重要的詞就是「函數式編程」現在「函數式編程」越來越受到關注了,有興趣的小夥伴可以了解一下,java8引入Lambda表達式就是為了更好的支持函數式編程。
2、簡單了解一下lambda的語法格式
(參數) ->{語句; }
上面就是lambda的語法格式,「->」是它的一個標誌,當你看到「->」你就知道這裡使用了Lambda表達式。
3、再來看一下Lambda的特徵
可選類型聲明:不需要聲明參數類型,編譯器可以統一識別參數值。可選的參數圓括號:一個參數無需定義圓括號,但多個參數需要定義圓括號。可選的大括號:如果主體包含了一個語句,就不需要使用大括號。可選的返回關鍵字:如果主體只有一個表達式返回值則編譯器會自動返回值,大括號需要指定明表達式返回了一個數值。
說了這麼多定義,您不禁要問一句了:java8為什麼要引入lambda表達式呀?
02為什麼引入Lambda?
在Java8出現之前,如果你想傳遞一段代碼到另一個方法裡是很不方便的。你幾乎不可能將代碼塊到處傳遞,因為Java是一個面向對象的語言,因此你要構建一個屬於某個類的對象,由它的某個方法來放置你想傳遞的代碼塊。
面向對象編程確實容易理解,可是每次進行操作都需要創建一個對象,就很麻煩,所以java中用了匿名函數來解決這個問題,使用匿名函數可以實現傳遞一段代碼。但是這種方式和Lambda表達式比較起來還是顯得很繁瑣。
03舉例子
1、用匿名函數的方式,實現一個線程
可以看到,用匿名函數的方式,我們似乎把run方法的代碼進行了傳遞。我們再來看下Runnable接口的源碼
可以發現,Runnable接口中只有一個run方法
那麼就是說,我在Thread中使用了Runnable這個匿名函數,一定是,並且只能是,實現run方法(這句話可能有些繞口,但是很重要哦!)
既然只能一定是實現run方法,那麼匿名函數中真正有用的代碼其實就是畫紅色的這一句。
2、Lambda進行代碼簡化
那既然只有那一行代碼是真正有用的,我為何不只寫那一行呢?
使用了Lambda表達式之後瞬間省了很多代碼,結合我們上面Lambda的語法定義就能看懂這個表達式。
()->{ System.out.println("線程"); }
左邊是參數,因為Runable的run方法無入參,所以也不用寫。
右邊是方法的實現,因為只有一個run方法,裡面寫的就是對run方法的實現。
04總結
看完上面的例子,其實小夥伴們就能看出來。Lambda表達式針對的其實就是「只有一個抽象方法的接口」。就像Runnable接口這樣的。java8中給這樣的接口起了個名字,叫「函數式接口」。
當要實現「函數式接口」時,你就可以使用Lambda表達式,表達式左邊是接口中抽象方法的入參,右邊就是抽象方法的具體實現。當然也可以自定義「函數式接口」。
關注我--我們一起進步