目标:
使用Lambda的标准格式简化匿名内部类的代码形式,Lambda只能简化接口中只有一个抽象方法的匿名内部类形式
实现代码:
package apilambda.d9_lambda;
public class LambdaDemo1 {
public static void main(String[] args) {
//目标:学会使用Lambda的标准格式简化匿名内部类的代码形式
//lambda只能简化接口中只有一个抽象方法的匿名内部类形式
//未简化的匿名内部类形式
// Swimming s=new Swimming() {
// @Override
// public void swim() {
// System.out.println("老师游得快~~~");
// }
// };
// go(s);
//lambda简化的匿名内部类形式
// Swimming s=()->{
// System.out.println("老师游得快~~~");
// };
// go(s);
System.out.println("-------------------------");
//继续简化
go(()->{
System.out.println("老师游得快~~~");
});
}
public static void go(Swimming swim){
System.out.println("开始!!!");
swim.swim();
System.out.println("结束!!!");
}
}
@FunctionalInterface//一旦加上这个注解必须是函数式接口,里边只能有一个抽象方法
interface Swimming{
void swim();
}
运行截图:
Lambda表达式可以继续简化:
实现代码:
package apilambda.d9_lambda;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Arrays;
import java.util.Comparator;
/**
* 目标:利用匿名内部类简化降序排列
*/
public class LambdaDemo2 {
public static void main(String[] args) {
Integer[] arr = {23, 12, 34, 14, 17};
//匿名内部类,未简化
// Arrays.sort(arr, new Comparator<Integer>() {
// @Override
// public int compare(Integer o1, Integer o2) {
// return o2-o1;//降序
// }
// });
//匿名内部类简化后
// Arrays.sort(arr,(Integer o1, Integer o2)->{
// return o2-o1;//降序
// });
//匿名内部类最终简化后
Arrays.sort(arr, (o1, o2) -> o2 - o1);
System.out.println(Arrays.toString(arr));
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("点我了"));
win.setSize(500, 400);
win.add(btn);
win.setVisible(true);
}
}
运行截图: