一、Lambda表达式
基本用法:
Lambda表达式是JDK 8开始新增的一种语法形式; 作用是用于简化匿名内部类的代码写法。
Lambda表达式只能简化函数式接口的匿名内部类。
语法:( ) -> { }
(被重写方法的形参列表) -> {
被重写方法的方法体代码。
}
函数式接口:
有且仅有一个抽象方法的接口。
大部分函数式接口都有@FunctionalInterface注解,有该注解的接口都是函数式接口。
Example1:
// 匿名内部类写法
double[] scores = {99.8, 128.0, 100.0};
Arrays.setAll(scores, new IntToDoubleFunction() {
@Override
public double applyAsDouble(int value) {
return scores[value] * 0.8;
}
});
// Lambda表达式简化写法
Arrays.setAll(scores, (int value) -> {
return scores[value] * 0.8;
});
Example2:
// 匿名内部类
Arrays.sort(students, new Comparator<Student>(){
@Override
public int compare(Student s1, Student s2) {
return s1.getAge() – s2.getAge();
}
});
// Lambda表达式
Arrays.sort(students, (Student s1, Student s2) ->{
return s1.getAge() – s2.getAge();
});
省略规则:
参数列表内的参数类型可以省略不写。
如果只有一个参数,参数类型可以省略,同时()也可以省略。如果Lambda表达式中的方法体代码只有一行代码,可以省略大括号不写,同时要省略分号;此时如果这行代码是return语句,也必须去掉return不写。