Lambda 表达式代替函数式接口实例
函数式接口:只有一个抽象方法的接口(由@FunctionalInterface修饰不会报错)
//语法格式如下:
(parameters) -> expression
或
(parameters) ->{ statements; }
注意
1. 参数parameters名必须与Lambda表达式外的任何变量不重名
2. expression语句只能使用parameters和Lambda表达式外的final变量 (JDK8后如果访问了外部变量则会给此变量自动添加final,这个变量以后就不能修改,匿名重写也同样不能访问!! 一个道理)
3. 右边只有一句语句时可以省略大括号和return
lambda表达式的重要特征:
上联:左右遇一括号省(左边参数是一个就可以省略括号,右边参数是一句话就可以省略大括号)
下联:左侧推断类型省(左侧没必要写参数类型)
横批:能省则省
// 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)
就直接这样用:(完全代替函数式接口实例)
应用
Lambda 表达式代替函数式接口实例!
只需要直接实现接口方法的parameters参数和expression返回值表达式!
/**
* 以二维数组的第二个值进行比较,从大到小排序二维数组
*/
//public static <T> void sort(T[] a, Comparator<? super T> c)
//int[][] boxTypes
Arrays.sort(boxTypes, (x, y) -> (y[1] - x[1]));