Lamda表达式

发布时间 2023-04-01 16:50:30作者: 流浪猫老大

函数式接口

  • 任何接口,如果只包含唯一一个抽象方法,那么他就是一个函数式接口
public interface Runnable{
	public abstract void run();
}
  • 对于函数式接口,我们可以通过lambda表达式来创建该接口的对象

lambda表达式

练习一:

//推导Lambda表达式
public class TestLambda1 {
    // 3.静态内部类
   static class Like2 implements ILike{

        @Override
        public void lambda() {
            System.out.println("i like lambda-->静态内部类");
        }
    }




    public static void main(String[] args) {
        ILike like = new Like();
        like.lambda();

        like = new Like2();
        like.lambda();

        // 4.局部内部类
        class Like3 implements ILike{

            @Override
            public void lambda() {
                System.out.println("i like lambda-->局部内部类");
            }
        }
        like = new Like3();
        like.lambda();


       // 5. 匿名内部类,没有类的名称,必须借助接口或者父类
        like = new ILike() {
            @Override
            public void lambda() {
                System.out.println("i like lambda-->匿名内部类");
            }
        };
        like.lambda();

        // 6. 用lambda简化
        like =()->{
            System.out.println("i like lambda-->lambda简化");
        };
        like.lambda();

        

    }
}

// 1. 定义一个函数式接口
interface ILike{
    void lambda();
}

// 2. 实现类
class Like implements ILike{

    @Override
    public void lambda() {
        System.out.println("i like lambda");
    }
}


  • 运行结果
    image

练习二:

public class TestLambda2 {
    
    public static void main(String[] args) {

        Love love = null;
        //1. Lambda表达式简化
        love =(int a)-> {
            System.out.println("i love "+a);
        };
        //2. 简化括号
        love =a-> {
            System.out.println("i love "+a);
        };
       /*
        love =(a,b)-> {
            System.out.println("i love "+a);
            System.out.println("i love 999");
        };
        */
        //3. 去掉花括号
        love =a->System.out.println("i love "+a);

        love.love(666);

        /*总结:
            lambda表达式只能有一行代码情况下才能简化成为一行,如果有多行,那么就用代码块包裹
            前提:接口是函数式接口
            多个参数也可以去掉参数类型,要去掉必须全部去掉,必须加上括号

         */

    }

}

// 函数式接口
interface Love{
    void love(int a);
}

总结:
lambda表达式只能有一行代码情况下才能简化成为一行,如果有多行,那么就用代码块包裹
前提:接口是函数式接口
多个参数也可以去掉参数类型,要去掉必须全部去掉,必须加上括号


为什么要使用Lambda表达式

  • 避免匿名内部类定义过多
  • 使代码看起来简洁
  • 去掉了一堆没有意义的代码,留下核心代码