Lambda表达式

先看一个张图

Lambda表达式_第1张图片
lambda-1.jpg

函数式接口

  • 接口中只有一个函数需要被实现的接口类型,我们叫它 函数式接口;
  • @FunctionalInterface注解声明该接口是函数式接口, 也就是说规定该接口中有且只有一个方法;
    比如:
    //只有一个函数的接口叫做函数式接口
    @FunctionalInterface
    interface MyAPi {
        void doSomeThing(String s);
    }
    

Lambda表达式

  • Lambda表达式本身就是一个接口的实现, 这样就可以将“一块代码”赋给一个Java变量, 比如:
      MyAPi myAPi = (s) -> System.out.println(s);
      myAPi.doSomeThing("1212"); //输出1212
    
  • 我们可以对比一下Lambda表达式和传统的Java对同一个接口的实现:


    Lambda表达式_第2张图片
    image.png
  • 以上两种写法本质上是等价的。但是显然,Java 8中的写法更加优雅简洁。并且,由于Lambda可以直接赋值给一个变量,我们就可以直接把Lambda作为参数传给函数, 而传统的Java必须有明确的接口实现的定义,初始化才行:


    Lambda表达式_第3张图片
    image.png

参考资料:
https://www.zhihu.com/question/20125256
https://www.runoob.com/java/java8-lambda-expressions.html

你可能感兴趣的:(Lambda表达式)