1.Lambda表达式是JDk8开始后的一种新的语法形式;
2.作用:简化匿名内部类的代码写法;
3.Lambda表达式的简化格式:
(匿名内部类被重写方法的行参列表)->{
被重写方法的方法代码
}
注:->是语法形式,无实际意义
注意:Lambda表达式只能简化函数试接口的匿名内部类的写法形式
4.什么是函数式接口:
1.首先必须是接口,其次接口中有且仅有一个抽象方法的形式。
2.通常我们会在接口上加上一个@FunctionalInterface
5.Lambda表达式的基本作用:
1. 简化函数式接口的匿名内部类的写法,如以下代码便是Lambda式最基础的使用;
//函数式接口
@FunctionalInterface//通常我们会在接口上加上函数式接口标识符
public interface Swimming {
void swim(); //函数式接口只有一个抽象方法
}
//匿名类的使用
public static void main(String[] args) {
goSwimming(new Swimming() {
@Override
public void swim() {
System.out.println("铁子 我们去游泳");
}
});
}
public static void goSwimming(Swimming swimming){
swimming.swim();
}
//匿名内部类的使用
public static void main(String[] args) {
goSwimming(() -> {
System.out.println("铁子,我们去游泳!!");
});
}
public static void goSwimming(Swimming swimming) {
swimming.swim();
}
6.Lambda表达式有什么前提:
1.必须是接口的匿名内部类,接口中只能有一个抽象方法;
7.Lambda的好处:
Lambda是一个匿名函数,我们可以吧Lambda的表达式理解为一段可以传递的代码,它可以写出更简洁,更灵活的代码,作为一种更紧凑的代码风格,使Java语言表达能力得到提升。
8.Lambda表达式省略规则:
1.如果方法中只有一个参数,哪么数据类型和小括号都可以省略;
2.如果方法中有多个参数,那么数据类型可以省略。
3.如果大括号只有一行代码,那么大括号,return,分号都可以省略(三个一起省略)
Integer[] arr1 = {34, 12, 42, 23};
Arrays.sort(arr1, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return 02 - 01;//降序
}
});
//如果方法中有多个参数,那么数据类型可以省略。
//如果大括号只有一行代码,那么大括号,return,分号都可以省略(三个一起省略)
Arrays.sort(arr1, (o1, o2) ->
02 - 01//降序
);