java中的lambda表达式
lambda表达式是java1.8版本的新特性,与函数式编程的思想相关。可以简化java代码,一般情况下与接口相配合使用
函数式编程与面向oop的思想相似
oop更关注类与类之间的关系,用对象建立连接,函数式编程传递的是函数,在java中通过变量去创建一个lambda表达式,返回出一个结果给变量或者产生一定的 功能。
语法格式
(parameters) -> expression
或者
(parameters) ->{ statements; }
以下是表达式的重要特征
- 当参数有具体的变量类型时,可以不用具体声明变量类型
- 当参数有且仅有一个时,可以不用加括号 ,但当有多个变量时,需要加圆括号
- 方法体内仅有一句代码时,可省略大括号
- 方法的表达式返回值仅有一个时,可以省略return
代码实例
以下方法使用lambda表达式实现两个double类型数据相加,参数a,b的类型确定,故省略类型声明,方法体内仅有一个表达式,省略大括号,和return。
public class ShowLambda {
public static void main(String[] args) {
NumberControl addTwoDouble = (a, b)-> a+b;
System.out.println(addTwoDouble.add(3,56));
}
}
@FunctionalInterface //当接口中仅有一个抽象方法时,可以使用此注解
interface NumberControl{
double add(double a, double b);
}
更简洁的写法
本实例以数组排序为例,调用Arrays的sort内置方法
之前的写法
public class ShowLambda {
public static void main(String[] args) {
// 实现之前先重写抽象方法
SortMyArray s = array -> Arrays.sort(array); //之前的写法
// 声明数组
int[] array = {1,4,6,78,9,0};
s.sortArray(array);
// 调用toString方法显示数组
System.out.println(Arrays.toString(array));
}
}
@FunctionalInterface //当接口中仅有一个抽象方法时,可以使用此注解
interface SortMyArray{
void sortArray(int[] args);
简洁版
sort方法需要一个 int类型的数组,抽象方法也需要一个int类型的数组,参数自动对应。使用::进行静态方法的传递。
import java.util.Arrays;
public class ShowLambda {
public static void main(String[] args) {
// 实现之前先重写抽象方法
// 方法体只有一句,并且直接操作这个参数,调用了已有类中的静态方法
// 此时可以省略参数不写,直接调用静态方法
// SortMyArray s = array -> Arrays.sort(array); //之前的写法
SortMyArray s = Arrays::sort; //省略后的写法
// 声明数组
int[] array = {1,4,6,78,9,0};
s.sortArray(array);
// 调用toString方法显示数组
System.out.println(Arrays.toString(array));
}
}
@FunctionalInterface //当接口中仅有一个抽象方法时,可以使用此注解
interface SortMyArray{
void sortArray(int[] args);
使用lambda可以极大的简化我们的代码。