●Lambda表达式是JDK8开始后的一种新语法形式。
●作用:简化匿名内部类的代码写法。
(匿名内部类被重写方法的形参列表) ->{
被重写方法的方法体代码。
}
注: ->是语法形式,无实际含义
注意: Lambda表达式只能简化函数式接口的匿名内部类的写法形式
什么是函数式接口?●首先必须是接口、其次接口中有且仅有一个抽象方法的形式
●通常我们会在接口.上加上一个@FunctionalInterface注解,标记该接口必须是满足函数式接口。
//目标:学会使用Lambda的标准格式简化匿名内部类的代码形式
// Lambda只能简化接口中只有一个抽象方法的匿名内部类形式
// 未简化
// Swimming s1 = new Swimming() {
// @Override
// public void swim() {
// System.out.println("小王游泳");
// }
// };
//简化
Swimming s1 = () -> {
System.out.println("小王游泳");
};
go(s1);
//未简化
// System.out.println("--------------------------");
// go(new Swimming() {
// @Override
// public void swim() {
// System.out.println("小刘游泳");
// }
// });
//简化
go(() ->{
System.out.println("小刘游泳");
});
}
public static void go (Swimming s){
System.out.println("开始");
s.swim();
System.out.println("结束");
}
@FunctionalInterface//一旦加上这个注解必须是函数式接口,里面只能有一个抽象方法
interface Swimming {
void swim();
}
总结
1、Lambda表达式的基本作用?
●简化函数式接口的匿名内部类的写法。
2、Lambda表达式有什么使用前提?
●必须是接口的匿名内部类,接口中只能有一个抽象方法
3、Lambda的好处?
●Lambda是一个匿名函数,我们可以把Lambda表达式理解为是一段可以传递的代码,它可以写出更简洁、更灵活的代码,作为一种更紧凑的代码风格,使Java语言表达能力得到了提升。
1、Lambda表达式简化Comparator接口的匿名形式
Integer[] age1 ={12,34,3,56,42};
// Arrays.sort(age1, new Comparator() {
// @Override
// public int compare(Integer o1, Integer o2) {
// return -(o1 - o2);//降序
// }
// });
Arrays.sort(age1,(Integer o1, Integer o2) -> {
return -(o1 - o2);//降序
});
System.out.println(Arrays.toString(age1));
2、Lambda表达式简化按钮监听器ActionListener的匿名内部类形式
●参数类型可以省略不写。
●如果只有一 个参数,参数类型可以省略,同时()也可以省略。
●如果Lambda表达式的方法体代码只有一行代码。可以省略大括号不写,同时要省略分号!
●如果Lambda表达式的方法体代码只有一行代码。可以省略大括号不写。此时,如果这行代码是return语句,必须省略return不写,同时也必须省略";"不写
Integer[] age1 ={12,34,3,56,42};
// Arrays.sort(age1, new Comparator() {
// @Override
// public int compare(Integer o1, Integer o2) {
// return -(o1 - o2);//降序
// }
// });
// Arrays.sort(age1,(Integer o1, Integer o2) -> {
// return -(o1 - o2);//降序
// });
// System.out.println(Arrays.toString(age1));
// Arrays.sort(age1,(o1,o2) -> {
// return -(o1 - o2);//降序
// });
Arrays.sort(age1,(o1,o2) -> -(o1 - o2));
// Swimming s1 = () -> {
// System.out.println("小王游泳");
// };
Swimming s1 = () -> System.out.println("小王游泳");
//未简化
// System.out.println("--------------------------");
// go(new Swimming() {
// @Override
// public void swim() {
// System.out.println("小刘游泳");
// }
// });
//简化
// go(() ->{
// System.out.println("小刘游泳");
// });
go(() -> System.out.println("小刘游泳"));



