Lamda表达式

Lamda表达式

  • 避免匿名内部类定义过多;使得代码简洁

  • 其实质属于函数式编程的概念

(params)->expression[表达式]
(params)->statement[语句]
(params)->{statements}

函数式接口

  • 任何接口,如果只包含一个抽象方法,那么它就是一个函数式接口。比如Runnable就是一个函数式接口。
  • 对于函数式接口,我们可以通过lambda表达式来创建该接口的对象

Lambda表达式推导

外部类——>静态内部类——>局部内部类——>匿名内部类——>Lambda表达式

  • 外部类

    public class lambdaDemo {
        public static void main(String[] args) {
            Lambda test = new Test();
            test.run();
        }
    }
    
    //定义一个函数式接口:只有一个抽象方法
    interface Lambda{
        void run();
    }
    
    //外部类
    class Test implements Lambda{
        @Override
        public void run() {
            System.out.println("普通方法");
        }
    }
    
  • 静态内部类

    public class lambdaDemo {
        //静态内部类
        static class Test implements Lambda{
            @Override
            public void run() {
                System.out.println("静态内部类");
            }
        }
        public static void main(String[] args) {
            Lambda test = new Test();
            test.run();
        }
    }
    
    //定义一个函数式接口:只有一个抽象方法
    interface Lambda{
        void run();
    }
    
  • 局部内部类:在方法里

    public class lambdaDemo {
        public static void main(String[] args) {
            //局部内部类
            class Test implements Lambda{
                @Override
                public void run() {
                    System.out.println("局部内部类");
                }
            }
            Lambda test = new Test();
            test.run();
        }
    }
    
    //定义一个函数式接口:只有一个抽象方法
    interface Lambda{
        void run();
    }
    
  • 匿名内部类

    public class lambdaDemo {
        public static void main(String[] args) {
            //匿名内部类
            Lambda test = new Lambda() {
                @Override
                public void run() {
                    System.out.println("匿名内部类");
                }
            };
            test.run();
        }
    }
    
    //定义一个函数式接口:只有一个抽象方法
    interface Lambda{
        void run();
    }
    
  • Lambda表达式

    public class lambdaDemo {
        public static void main(String[] args) {
            //Lambda表达式
            Lambda test = ()->{
                    System.out.println("Lambda表达式");
            };
            test.run();
        }
    }
    
    //定义一个函数式接口:只有一个抽象方法
    interface Lambda{
        void run();
    }
    

    注意:方法里只有一条语句,可以简化花括号

    public class lambdaDemo {
        public static void main(String[] args) {
            //Lambda表达式
            Lambda test = ()-> System.out.println("Lambda表达式");
            test.run();
        }
    }
    
    //定义一个函数式接口:只有一个抽象方法
    interface Lambda{
        void run();
    }
    

Lambda简化规则

  • 可以简化参数类型
  • 如果只有一个参数,可以去掉()
  • 如果只有一条语句,可以去掉{}

使用Lambda表达式创建多线程

public class lambdaDemo {
    public static void main(String[] args) {
        //匿名内部类+Lambda
       new Thread(()-> System.out.println("线程开启")).start();
    }
}
posted @ 2022-11-05 20:44  奚罗罗  阅读(16)  评论(0编辑  收藏  举报