ava -- Lambda 表达式
概述
Lambda 表达式是 JDK8 引入的新特性,是一个匿名函数。Lambda 表达式允许把一个函数作为另一个函数的参数(将一个函数作为参数传入另一个函数),可以使代码更简洁、灵活。
它有以下特点:
- Lambda 表达式并不能独立执行,实际上它用于实现函数式接口中定义的唯一抽象方法;
- 使用 Lambda 表达式会创建实现该函数式接口的匿名类的实例,可以将其看作一个对象,可用作参数传递以及返回值接收,相比使用匿名内部类来实现,更为简洁;
其语法格式如下:
(参数列表) -> 表达式;
或
(参数列表) -> {代码块}
函数式接口
函数式接口指的是有且仅有一个抽象方法的接口(可以有 default 方法和 static 方法),适用于函数式编程,也就是适用于 lambda 表达式的接口。
可以使用 @FunctionalInterface 注解来表明该接口为一个函数式接口:
@FunctionalInterface
pulblic interface FunctionalInterface {
定义抽象方法;
}
使用该注解来定义接口时,编译器会检查是否满足函数式接口条件,也就是检查是否有且仅有一个抽象方法,若不是则编译错误。即便不使用该注解,只要接口只含有一个抽象方法,它就是一个函数式接口。
Lambda 表达式的使用
案例:对二维数组进行按行排序,行首元素较小这排前,行首元素较大者排后。
方法一,利用匿名类实现
Arrays.sort(nums, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
return (o1[0] == o2[0]) ? 0 : (o1[0] - o2[0]);
}
});
方法二,利用 Lambda 表达式
Arrays.sort(nums, (o1, o2) -> (o1[0] == o2[0] ? 0 : o1[0] - o2[0]));