在JAVA中,“Lambda 表达式”(Lambda expression)是一个抽象方法的实现。这个抽象方法必须是在接口中声明的,并且实现类只须要实现这一个抽象方法,咱们称这种接口为函数式接口。Lambda表达式就是函数式接口的实现,来完成对数据的处理。java
JAVA函数一般是咱们类中定义的行为,格式以下:express
修饰符 返回类型 函数名(参数列表){ 语句块 return 返回值; }
这就是函数的基本格式。
代码中函数名,返回类型是必定要有的,其余的无关紧要。
因此代码中最简单的函数定义格式以下:编程
返回类型 函数名();
咱们说Lambda表达式是一个匿名函数,那咱们来看一下Lambda表达式的格式。闭包
(参数列表) -> {语句块}
“->”是必须有的,咱们来看下最简单的Lambda表达式结构:函数式编程
() -> {}
Lambda表达式是一个表达式,程序中被做为一个值来使用。JAVA语言是强类型面向对象的语言,因此必须提供一种数据类型做为Lambda表达式的返回值类型、符合JAVA中函数格式的定义、符合面向对象规则,因此最终Lambda表达式要有一个映射成JAVA对象的过程。函数
函数式接口是用来完成Lambda表达式映射成JAVA对象的一种接口,确切的说把接口中仅存的一个抽象方法和Lambda表达式绑定并完成对象的实例化。code
那么接口是如何与Lambda表达式创建类型关系的?对象
接口的抽象方法。下面举例说明。接口
定一个函数式接口io
/** * @author Stephen Yue */ public interface Nothing { void doNothing(); }
咱们在接口里定义了一个没有参数、返回值的抽象方法。
接口咱们定义好了,须要咱们定义接口的实现方式。咱们选取Lambda表达式来完成这个实现。
// 指定接口中方法的实现过程并建立对象 Nothing nothing = () -> {}; nothing.doNothing();
给Nothing接口中doNothing方法指定了一个空实现的Lambda表达式。即没有参数、没有返回值、什么都不作的一个空实现。因此执行以后没有任何结果。咱们改一下实现方式。
Nothing nothing = () -> { System.out.println("hello Lambda!"); }; nothing.doNothing();
新的Lambda表达式实现一样符合接口中抽象方法定义的要求,不过程序执行完,会在控制台输出:hello Lambda!
Lambda表达式的出现,提供了新的接口实现方式。接口中抽象方法名字是Lambda表达式的标识符,接口中参数类型对应Lambda表达式的参数类型,接口中返回类型对应Lambda表达式返回类型,Lambda表达式的语句块来完成抽象方法的逻辑实现。
Lambda表达式的优势: