Java自誕生已經有十幾個年頭了,目前也已經發布了第十三個大版本,其中Java8是常用的版本中最新的一個版本。而Java8最大的特性就是:Lambda表達式、函數式接口和Stream流。
本篇我只介紹Lamda表達式的概念以及簡單使用,至于別的我打算放到另一篇文章中講,否則會導致文章太過臃腫。廢話不多說,下面進入正題。
對于Lambda表達式來說,Java是在JDK8之后引入的。其目的是將一段代碼作為參數進行傳遞,其格式為:
(參數列表) -> {邏輯代碼塊}
在沒有Lambda表達式的日子里,為了將一段代碼作為參數傳遞,我們不得不使用對象來實現。但是自從Lambda表達式有了之后,我們就可以跟過去的方式說再見。
下面我寫一個簡單的例子給大家感受感受。本例子的作用是調用Collections的sort的方法對一個List集合進行降序排序。因為默認的排序方式是升序的,所以我們需要傳入自定義的比較器。
首先先來看一些非Lambda表達式方式的實現:

非Lambda方式實現
接著再來看看使用Lambda表達式的方式實現:

我這個例子的目的是為了實現一個整型集合的倒序排列。從上圖可以看出,使用Lambda表達式方式實現明顯要比接口實現類對象方式簡潔得多。
那么使用Lambda和不使用Lambda只是這種區別么?不,還有一個區別。那就是編譯后是否會生成額外的內部類文件。
不使用Lambda表達式的時候用“javac”編譯后效果如下:

使用Lambda表達式時候用“javac”命令編譯后效果如下:

對比后發現,使用Lambda方式后還可以避免生成多余的類文件。
既然,使用Lambda表達式這么爽,那么是不是可以無限制使用呢?不,使用Lambda表達式還是有限制條件的,其限制條件就是只能是運用在使用函數式接口的地方。關于函數式接口的內容大家可以自己在網上看相關資料或查看我的另一篇文章:Java8特性:函數式接口之概念篇,這里就不過多提及了。