1. Lambda简介
“Lambda 表达式”(lambda expression)是Java 8 中一个重要的新特性,Lambda表达式基于数学中的 λ 演算得名,是一个匿名函数,即没有函数名的函数。在Java 中,无需实现接口即可使用接口中的方法,使用它设计的代码会更加简洁,虽然看着很先进,但Lambda 表达式的本质只是一个“语法糖”。
例如抽象方法:
public abstract int sum(int a, int b);
翻译成为 Lambda:
(int a, int b) -> { return a + b; }
Java当中使用 Lambda 表达式的前提是:必须有“函数式接口”。
概念:有且仅有一个抽象方法的接口,叫做函数式接口。
如何才能万无一失地检测一下当前接口是不是函数式接口呢?
用一个固定的格式写在public interface
之前一行即可:
@FunctionalInterface
public interface 函数式接口名 {
// ...
}
Lambda 表达式要想使用,一定要有函数式接口的推断环境:
- 要么通过方法的参数类型来确定是哪个函数式接口
- 要么通过赋值操作来确定是哪个函数式接口
Lambda 的格式就是为了将抽象方法,翻译成为以下三点:
- 一些参数(方法参数)
- 一个箭头
- 一些代码(方法体,大括号)
举栗如下:
public static void main(String[] args) {
// 调用方法的时候,参数类型是函数式接口,所以 Lambda 可以推断出来是哪个接口
method((int a, int b) -> { return a + b; });
// 也可以根据赋值语句左侧的类型来进行 Lambda 上下文推断
Calculator param = (int a, int b) -> { return a + b; };
method(param);
}
2. Lambda 如何简写?
在 Lambda 表达式当中,凡是可以推导的,都是可以省略的:
1)Lambda 表达式当中的参数类型可以省略不写。
2)如果参数有且仅有一个,那么小括号可以省略。
3)如果语句只有一个,那么大括号、分号和 return 也可以省略。
举栗如下:
@FunctionalInterface
public interface MyInter {
public abstract int singlePlus(int m);
}
public static void main(String[] args) {
// 标准格式
method((int x) -> { return ++x; });
// 省略参数类型
method((x) -> { return ++x; });
// 省略参数小括号
method(x -> { return ++x; });
// 省略大括号和 return 关键字
method(x -> ++x);
}
public static void method(MyInter myInter) {
System.out.println(myInter.singlePlus(10));
}
网友评论