一 Lambda 表达式
Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。使用 Lambda 表达式可以使代码变的更加简洁紧凑,Lambda 属于函数式编程思想
。
1.1 语法
lambda 表达式的语法格式如下:
(parameters) -> expression
或
(parameters) ->{
statements; }
Lambda 表达式的标准格式:
(参数类型 参数名) -> {
方法体;
return 返回值;
}
Lambda 表达式的省略规则:
- 小括号中的参数类型可以省略。
- 如果小括号中只有一个参数,那么可以省略小括号。
- 如果大括号中只有一条语句,那么可以省略大括号,return,分号。
格式解释:
- 小括号中的参数和之前方法的参数写法一样,可以写任意个参数,如果多个参数,要使用逗号隔开。
- -> 是一个运算符,表示指向性动作。
- 大括号中的方法体以及 return 返回值的写法和之前方法的大括号中的写法一样。 Lambda 表达式是函数式编程思想。
public class Demo04SimpleLambda {
//定义方法,使用接口当做参数
public static void method(MyInterface m) {
m.printStr("hello");
}
public static void main(String[] args) {
//调用method方法,参数传递MyInterface实现类对象
method(new MyInterface() {
@Override
public void printStr(String str) {
System.out.println(str);
}
});
//使用Lambda表达式的标准格式。
method((String str) -> {
System.out.println(str);
});
//1. 小括号中的参数类型可以省略。
method((str) -> {
System.out.println(str);
});
//2. 如果小括号中只有一个参数,那么可以省略小括号。
method(str -> {
System.out.println(str);
});
//3. 如果大括号中只有一条语句,那么可以省略大括号,return,分号。
method(str -> System.out.println(str));
}
}
以下是lambda表达式的重要特征:
- 可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。
- 可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。
- 可选的大括号:如果主体包含了一个语句,就不需要使用大括号。
- 可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定明表达式返回了一个数值。
Lambda 表达式的使用前提:
- 必须有接口(不能是抽象类),接口中有且仅有一个需要被重写的抽象方法。
- 必须支持上下文推导,要能够推导出来 Lambda 表达式表示的是哪个接口中的内容。
可以使用接口当做参数,然后传递 Lambda 表达式(常用),也可以将 Lambda 表达式赋值给一个接口类型的变量。
public class Demo05BeforeLambda {
//使用接口当做参数
public static void method(MyInterface m) {
//m = s -> System.out.println(s)
m.printStr("HELLO");
}
public static void main(String[] args) {
//使用接口当做参数,然后传递Lambda表达式。
//method(s -> System.out.println(s));
//使用匿名内部类方式创建对象
/*
MyInterface m = new MyInterface() {
@Override
public void printStr(String str) {
System.out.println(str);
}
};
*/
MyInterface m = str -