Java – Lambda 表达式
简介
Lambda 是一个匿名函数,我们可以把Lambda表达式理解为是一段可以传递的代码,它可以写出更简洁、更灵活的代码,作为一种更紧凑的代码风格,使Java语言表达能力得到了提升。
使用Lambda
Lambda 在JDK8 后引入的。
举例,我们使用 Arrays.sort() 排序函数,sort() 方法需要一个类实现它的接口方法,我们通常使用匿名内部类作为这个方法的调用,代码如下
Arrays.sort(arr, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o1 - o2;
}
});
通过使用Lambda 表达式,我们可以简化接口实现名和接口方法:
Arrays.sort(arr, (Integer o1, Integer o2) -> {
return o1 - o2;
});
Lambda 表达式
Lambda 表达式书写方法如下,
(参数 ) -> {
方法体
});
Lambda 使用限制
1.Lambda 表达式只能简化函数式接口的匿名内部类的写法
2.函数式接口是指:有且仅有一个抽象方法的接口,接口上方可以加上 @FunctionalInterface
Lambda 省略写法
1.参数类型可以省略不写
2.如果只有一个参数,参数类型可以省略不写,同时 () 也可以省略
3.如果 Lambda 表达式的方法体只有一行,大括号,分号,return 也可以省略不写,需要同时省略。
举例
我们先定义一个只接收一个参数的接口
@FunctionalInterface
interface Swim{
public abstract int swimmer(int i);
}
// 这个方法调用接口方法
public static void swimmer(Swim s, int i){
s.swimmer(i);
}
当我们要调用这个方法的时候,当参数是一个接口,我们就必须实现这个参数:
swimmer(new Swim() {
@Override
public int swimmer(int i) {
return i;
}
});
使用Lambda方法
swimmer((int i) -> {
return i;
}
);
因为传入参数只有一个,所以可以省略 () 和类型
swimmer( i -> {
return i;
}
);
因为方法体中,只有一行,所以可以把 大括号,分号,和 return 也省略掉,最后简化结果:
swimmer(i -> i);
共有 0 条评论