Lambda概述
Lambda表达式是JDK 8开始后的一种新语法形式。
作用:简化匿名内部类的代码写法。
Lambda表达式的简化格式
(匿名内部类被重写方法的形参列表) -> {
被重写方法的方法体代码。
}
注:-> 是语法形式,无实际含义
注意:Lambda表达式只能简化函数式接口的匿名内部类的写法形式
什么是函数式接口?
首先必须是接口,其次接口中有且仅有一个抽象方法的形式
首先来体验一下子
public class Lambda1 {
public static void main(String[] args) {
//使用Lambda的标准格式简化匿名内部类的代码形式
Animal a = new Animal() {
@Override
public void run() {
System.out.println("我们终会开始,以理想为船只,以笔为武器,以决心为理性,开起吧,属于我们的奇迹与辉煌,宣誓我的胜利吧;让我们在青春的白纸上绘上绚丽的色彩吧,你我终会抓住到理想的尾巴");
}
};
a.run();
// 注意:lambda并不是可以简化所有匿名匿名内部类形式!!
// Animal a1 = () -> {
// System.out.println("我压缩贼溜~~~~~");
// };
// a1.run();
}
}
abstract class Animal{
public abstract void run();
}
public class Lambda2 {
public static void main(String[] args) {
// 使用Lambda的标准格式简化匿名内部类的代码形式
// 注意:Lambda只能简化接口中只有一个抽象方法的匿名内部类形式(函数式接口)
Swimming s = new Swimming() {
@Override
public void swim() {
System.out.println("我亚索贼溜~~~~~");
}
};
Swimming s1 = () -> {
System.out.println("我亚索贼溜~~~~~");
};
Swimming s2 = () -> System.out.println("我亚索贼溜~~~~~");
go(s2);
System.out.println("---------------------");
// go(new Swimming() {
// @Override
// public void swim() {
// System.out.println("死亡如风,常伴吾身~~~");
// }
// });
// go(() ->{
// 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();
}
Lambda表达式简化Comparator接口的匿名形式
以及Lambda表达式简化按钮监听器ActionListener的匿名内部类形式
注意:通常我们见到的函数式接口上都有一个@FunctionalInterface注解,标记该接口必须是满足函数式接口。
public class Lambda3 {
public static void main(String[] args) {
Integer[] ages1 = {34, 12, 42, 23};
/**
参数一:被排序的数组 必须是引用类型的元素
参数二:匿名内部类对象,代表了一个比较器对象。
*/
Arrays.sort(ages1, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2 - o1; // 降序
}
});
Arrays.sort(ages1, (Integer o1, Integer o2) -> {
return o2 - o1; // 降序
});
Arrays.sort(ages1, ( o1, o2) -> {
return o2 - o1; // 降序
});
Arrays.sort(ages1, ( o1, o2 ) -> o2 - o1 );
System.out.println(Arrays.toString(ages1));
System.out.println("---------------------------");
JFrame win = new JFrame("登录界面");
JButton btn = new JButton("我是一个按钮");
// btn.addActionListener(new ActionListener() {
// @Override
// public void actionPerformed(ActionEvent e) {
// System.out.println("点我,点我!!");
// }
// });
// btn.addActionListener((ActionEvent e) -> {
// System.out.println("点我,点我!!");
// });
// btn.addActionListener(( e) -> {
// System.out.println("点我,点我!!");
// });
// btn.addActionListener( e -> {
// System.out.println("点我,点我!!");
// });
btn.addActionListener( e -> System.out.println("点我,点我!!") );
win.add(btn);
win.setSize(400, 300);
win.setVisible(true);
}
}