先看一个张图
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对同一个接口的实现:
image.png -
以上两种写法本质上是等价的。但是显然,Java 8中的写法更加优雅简洁。并且,由于Lambda可以直接赋值给一个变量,我们就可以直接把Lambda作为参数传给函数, 而传统的Java必须有明确的接口实现的定义,初始化才行:
image.png
参考资料:
https://www.zhihu.com/question/20125256
https://www.runoob.com/java/java8-lambda-expressions.html
网友评论