Lambda 表達式的實質屬于函數式程式設計。
文法格式為:<code>(parameters) -> expression</code>或<code>(parameters) ->{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
實作類-->靜态内部類-->局部内部類-->匿名内部類-->Lambda 表達式
簡化過程如下:
實作類
靜态内部類
局部内部類
匿名内部類
Lambda 表達式
當隻有一個參數時,可簡化參數類型和括号
當有多個參數時,可簡化參數類型,必須加括号