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 表达式
当只有一个参数时,可简化参数类型和括号
当有多个参数时,可简化参数类型,必须加括号