Java的Lambda表达式和函数接口
下面主要将四个方面,并会给出具体的例子
- 函数接口
- lambda表达式
- 使用Lambda表达式作为函数接口参数
- 使用方法引用或构造器作为函数接口参数
1.函数接口
函数式接口(Functional Interface)就是一个有且仅有一个抽象方法的接口。
函数式接口可以被隐式转换为 lambda 表达式。
Lambda 表达式和方法引用(实际上也可认为是Lambda表达式)上。
如定义了一个函数式接口如下:
@FunctionalInterface //该注解只是显示的标注了接口用是一个函数接口,并强制编译器进行更严格的检查,如果不是就会报错。但也如果保证该接口是一个函数式接口也也可以不加该注解。
interface GreetingService
{
void sayMessage(String message);
}
函数式接口可以对现有的函数友好地支持 lambda。
2.lambda表达式
Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。
Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。
使用 Lambda 表达式可以使代码变的更加简洁紧凑。
lambda 表达式的语法格式如下:
(parameters) -> expression
或
(parameters) ->{ statements; }
组成格式即:
- (数据类型 参数名,数据类型 参数名…):用来向表达式主体传递接口方法需要的参数。在编写Lambda表达式时**,可以省略参数的数据类型,后面的表达式主体会自动进行校对和匹配**。同时,如果只有参数,则可以省略括号()
- -> : 表示lambda表达式箭牌,用来指向参数数据指向,不能省略,且必须用英文符号。
- {表达式主体}:由单个表达式或语句块组成的主体,本质就是接口中抽象方法的具体实现。如果表达式主体只有一条语句,那么可以省略包含主体的大括号。另外,在lambda表达式主体中允许有返回值,当只有一条return语句时,也可以省略return关键字 。
lambda表达式多用于实现函数接口作为方法参数。
3.使用Lambda表达式实现函数接口
举一个例子
package learn;
import java.util.*