Demo1:
package com.itheima.d9_lambda; public class LambdaDemo1 { public static void main(String[] args) { //目标:学会使用lambda的标准格式简化匿名内部类的代码形式 Animal a = new Animal() { @Override public void run() { System.out.println("乌龟跑得很慢!"); } }; a.run(); // Animal a1 = ()->{ // System.out.println("乌龟跑得很慢!"); // }; // a.run(); } } abstract class Animal{ public abstract void run(); }
Demo2:
package com.itheima.d9_lambda; public class LambdaDemo2 { public static void main(String[] args) { //目标:学会使用lambda的标准格式简化匿名内部类的代码形式 //Lambda只能简化接口中只有一个抽象方法的匿名内部类形式 // Swimming s1 = new Swimming() { // @Override // public void swim() { // System.out.println("老师游泳贼溜!!!!!"); // } // }; // go(s1); 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(); }
Demo3:
package com.itheima.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 LambdaDemo3 { public static void main(String[] args) { Integer[] ages1 = {16 , 32 , 11 , 6 , 98}; /** * 参数一:被排序的数组,必须是引用类型的元素 * 参数二:匿名内部类对象,代表了一个比较器对象 */ // Arrays.sort(ages1, new Comparator<Integer>() { // @Override // public int compare(Integer o1, Integer o2) { // return o2 - o1; //降序 // } // }); // System.out.println(Arrays.toString(ages1)); Arrays.sort(ages1, (Integer o1, Integer o2)-> { return o1 - o2; //升序 }); 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("我被点击了"); }); win.add(btn); win.setSize(400,300); win.setVisible(true); } }
1、Lambda表达式的基本作用?
简化函数式接口的匿名内部类的写法
2、Lambda表达式有什么使用前提?
必须是接口的匿名内部类,接口中只能有一个抽象方法
(Demo1中出bug的原因就是因为lambda不能使用在抽象类上,使用后或提示‘Target type of a lambda conversion must be an interface’)
3、Lambda的好处?
Lambda是一个匿名函数,我们可以把Lambda表达式理解为是一段可以传递的代码,它可以写出更简洁、更灵活的代码作为一种更紧凑的代码风格,使java语言表达能力得到了提升