###什么是 lambda?
#####百度百科
Lambda 表达式(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。Lambda表达式可以表示闭包(注意和数学传统意义上的不同)。
###lambda 的优点
没有使用Lambda表达式之前
1
2
3
4
5
6
7
8
9public class OldThread {
public static void main(String[] args) {
new Thread(new Runnable() {
public void run() {
System.out.println("Hello World!");
}
}).start();
}
}使用了Lambda表达式之后
1
2
3
4
5public class LambdaThread {
public static void main(String[] args) {
new Thread(() -> System.out.println("Hello World!")).start();
}
}
我们发现使用lambda只需一行代码就搞定了之前需要一个匿名类需要完成的事情,所以,Lambda 表达式是创建匿名内部类的语法糖。在编译器的帮助下,可以让开发人员用更少的代码来完成工作。
###lambda 的语法风格
#####Lambda表达式由三部分组成:
参数列表
箭头
主体
有两种风格,分别是:
#####表达式-风格
(parameters) -> expression
#####块-风格
(parameters) -> { statements; }
依据上面的风格介绍,来试着判断下面给出的示例是否有效:
- () -> {}
- () -> “Apple”
- () -> { return “Apple”; }
- (Integer i) -> return “Apple” + i
- (String s) -> { “Apple”; }
解析:
###函数式编程接口
Lambda表达式写好了,我们要知道哪里能用Lambda表达式。已知Lambda表达式可看作是匿名内部类的实现,那对于匿名内部类来说最重要的是类所实现的接口,而Lambda表达式是否可用于所有接口?答案“不是的”,Lambda表达式对接口有一定的要求,必须是函数式接口。
所谓的函数式接口指的是只定义一个抽象方法的接口
例如:
1 | public interface Comparator<T> { |
###复合Lambda表达式