定义
Lambda表达式是 Java8 中最重要的新功能之一。使用 Lambda 表达式可以替代 只有一个抽象函数的接口实现, 告别匿名内部类,代码看起来更简洁易懂。Lambda表达式同时还提升了对集合、框架的迭代、遍历、过滤数据的操作。
可见Lambda表达式的使用场景是替代“只有一个抽象函数的接口”的实现。
语法
// 表达式写法
(parameters) -> expression
// 代码块写法
(parameters) -> { statements; }
实例
// 1. 不需要参数,返回值为 5
() -> 5
// 2. 接收一个参数(数字类型),返回其2倍的值
x -> 2 * x
// 3. 接受2个参数(数字),并返回他们的差值
(x, y) -> x – y
// 4. 接收2个int型整数,返回他们的和
(int x, int y) -> x + y
// 5. 接受一个 string 对象,并在控制台打印,不返回任何值(看起来像是返回void)
(String s) -> System.out.print(s)
代码
public class MyLambda {
@FunctionalInterface
interface MathOperation {
int operation(int a, int b);
}
public static void main(String[] args) {
MyLambda myLambda = new MyLambda();
MathOperation add = (a, b) -> a + b;
MathOperation sub = (a, b) -> a - b;
int res1 = myLambda.ops(1, 2, add);
int res2 = myLambda.ops(1, 2, sub);
System.out.println(res1);
System.out.println(res2);
}
private int ops(int a, int b, MathOperation mathOperation) {
return mathOperation.operation(a,b);
}
}
方法引用
什么是方法引用?
- 方法引用是用来直接访问类或者实例的已经存在的方法或者构造方法
- 方法引用提供了一种引用而不执行方法的方式,
- 如果抽象方法的实现恰好可以使用调用另外一个方法来实现,就有可能可以使用方法引用
方法引用的分类
| 类型 | 语法 | 对应的lambda表达式 |
|---|---|---|
| 静态方法引用 | 类名::staticMethod | (args) -> 类名.staticMethod(args) |
| 实例方法引用 | inst::instMethod | (args) -> inst.instMethod(args) |
| 对象方法引用 | 类名::instMethod | (inst, args) -> 类名.instMethod(args) |
| 构造方法引用 | 类名::new | (args) -> new 类名(args) |