Lambda表达式是JDK 8开始新增的一种语法形式; 作用:用于简化匿名内部类的代码写法。
格式:(被重写方法的形参列表) -> {被重写方法的方法体代码}
注意 : Lambda表达式只能简化函数式接口的匿名内部类!!!
什么是函数式接口?
有且仅有一个抽象方法的接口。
注意:将来我们见到的大部分函数式接口,上面都可能会有一个@FunctionalInterface的注解,有该注解的接口就必定是函数式接口。
举个栗子:
Lambda表达式简化Comparator接口的匿名形式:
Arrays.sort(students, new Comparator<Student>(){
@Override
public int compare(Student s1, Student s2) {
return s1.getAge() – s2.getAge();
}
});
简化为:
Arrays.sort(students, (Student s1, Student s2) ->{
return s1.getAge() – s2.getAge();
});
Lambda表达式的省略写法(进一步简化Lambda表达式的写法)
参数类型可以省略不写。
如果只有一个参数,参数类型可以省略,同时()也可以省略。
如果Lambda表达式中的方法体代码只有一行代码,可以省略大括号不写,同时要省略分号!此时,如果这行代码是return语句,也必须去掉return不写。
JDK8新特性:方法引用(了解)
静态方法的引用
类名::静态方法。
使用场景:如果某个Lambda表达式里只是调用一个静态方法,并且前后参数的形式一致,就可以使用静态方法引用。
实例方法的引用
对象名::实例方法。
使用场景:如果某个Lambda表达式里只是调用一个实例方法,并且前后参数的形式一致,就可以使用实例方法引用。
特定类型的方法引用
类型::方法。
使用场景:如果某个Lambda表达式里只是调用一个实例方法,并且前面参数列表中的第一个参数是作为方法的主调,后面的所有参数都是作为该实例方法的入参的,则此时就可以使用特定类型的方法引用。
构造器引用
类名::new。
使用场景:如果某个Lambda表达式里只是在创建对象,并且前后参数情况一致,就可以使用构造器引用。