天天看點

Java8新特性——Lambda 表達式

​ ​ ​ ​ ​ ​ ​ ​ Lambda 表達式的實質屬于函數式程式設計。

​ ​ ​ ​ ​ ​ ​ ​ 文法格式為:<code>(parameters) -&gt; expression</code>或<code>(parameters) -&gt;{statements; }</code>

​ ​ ​ ​ ​ ​ ​ ​

Lambda 表達式的特點

Lambda 表達式隻能引用标記了 final 的外層局部變量

不能在lambda 内部修改定義在域外的局部變量

Lambda 表達式的局部變量可以不用聲明為 final,但是必須不可被後面的代碼修改(自帶 final)

Lambda 表達式當中不允許聲明一個與局部變量同名的參數或者局部變量

Lambda 表達式的作用

避免匿名内部類定義過多

讓代碼更簡潔,隻留下核心邏輯

​ ​ ​

​ ​ ​ ​ ​ ​ ​ ​ 函數式接口 Functional Interface,是隻包含唯一一個抽象方法的接口。對于函數式接口,可以通過 Lambda 表達式來直接建立該接口的對象。如 Runnable 接口:

使用 Lambda 表達式實作 Runnable

JDK 1.8之前已有的函數式接口:

java.lang.Runnable

java.util.concurrent.Callable

java.security.PrivilegedAction

java.util.Comparator

java.io.FileFilter

java.nio.file.PathMatcher

java.lang.reflect.InvocationHandler

java.beans.PropertyChangeListener

java.awt.event.ActionListener

javax.swing.event.ChangeListener

JDK 1.8 新增加的函數接口:

java.util.function

​ ​ ​ ​ ​ ​ ​ ​ 實作類--&gt;靜态内部類--&gt;局部内部類--&gt;匿名内部類--&gt;Lambda 表達式

​ ​ ​ ​ ​ ​ ​ ​ 簡化過程如下:

實作類

靜态内部類

局部内部類

匿名内部類

Lambda 表達式

​ ​ ​ ​ ​ ​ ​ ​ 當隻有一個參數時,可簡化參數類型和括号

​ ​ ​ ​ ​ ​ ​ ​ 當有多個參數時,可簡化參數類型,必須加括号