Lambda表达式
Lambda表达式
Lambda概述
- Lambda表达式时JDK8开始后的一种新语法格式
- 作用:简化匿名内部类的代码写法
Lambda表达式的简化格式

注意:Lambda表达式只能简化函数式接口的匿名内部类的写法形式
什么是函数式接口?
- 首先必须是接口、其次接口中有且仅有一个抽象方法的形式
- 通常我们会在接口上加上一个 @FunctionalInterface 注解,标记该接口必须是满足函数式接口

/**
 * 目标:学会使用Lambda的标志格式简化匿名内部类的代码形式
 * Lambda只能简化接口中只有一个抽象方法的匿名内部类形式
 */
public class LambdaDemo2 {
    public static void main(String[] args) {
//        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();
}

Lambda实战-简化常见函数式接口
Lambda表达式简化Comparator接口的匿名形式

Lambda表达式简化按钮监听器ActionListener的匿名内部类形式

public class LambdaDemo3 {
    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; //降序
            });
        System.out.println(Arrays.toString(ages1));
        System.out.println("---------------------");
        JFrame win = new JFrame("登录");
        JPanel panel = new JPanel();
        win.add(panel);
        win.setSize(400,300);
        win.setVisible(true);
        JButton btn = new JButton("按钮");
        JButton btn2 = new JButton("点我!");
        btn.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("点我,点我,有人点我!");
            }
        });
        btn2.addActionListener(e -> System.out.println("点我,点我,有人点我!"));
        panel.add(btn);
        panel.add(btn2);
    }
}
Lambda表达式的省略规则

 

 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号