Lambda
Lambda 表达式也可称为闭包,是 JDK8 的一个新特性,可以取代大部分的匿名内部类,写出更优雅的 Java 代码,尤其在集合的遍历和其他集合操作中,可以极大地优化代码结构。
JDK 也提供了大量的内置函数式接口供我们使用,使得 Lambda 表达式的运用更加方便、高效。
语法
lambda 表达式的语法格式如下:
(parameters) -> expression
或
(parameters) ->{ statements; }
以下是lambda表达式的重要特征:
可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。
可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。
可选的大括号:如果主体包含了一个语句,就不需要使用大括号。
可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定表达式返回了一个数值。
对接口的要求
函数式接口:
接口有且仅有一个抽象方法才能使用lambad表达式。
函数式接口是指,有且仅有一个抽象方法的接口。
Java8引入了注解@FunctionalInterface修饰函数式接口的,要求接口中的抽象方法只有一个。
方法的引用
Lambda主体只有一条语句时,程序可以省略主体大括号,还可以通过英文“ :: ”来引用方法和构造器。两种方式:
函数式接口:
接口有且仅有一个抽象方法才能使用lambad表达式。
函数式接口是指,有且仅有一个抽象方法的接口。
Java8引入了注解@FunctionalInterface修饰函数式接口的,要求接口中的抽象方法只有一个。
方法的引用:
Lambda主体只有一条语句时,程序可以省略主体大括号,还可以通过英文“ :: ”来引用方法和构造器。两种方式:
种类 | Lambda表达式 | 对应引用示例 |
---|---|---|
类名引用普通方法 | (x,y,…)->对象名x.类普通方法(x,y,…) | 类名 :: 类普通方法 |
类名引用静态方法 | (x,y,…)->类名.类静态方法(x,y,…) | 类名 :: 类静态方法名 |
对像名引用方法 | (x,y,…)->对象名.实例方法(x,y,…) | 对象名 :: 实例方法名 |
构造器引用 | (x,y,…)->new 类名(x,y,…) | 类名 :: new |