lambda表达式:
- 使用 Lambda 表达式可以使代码变的更加简洁紧凑。
- Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。
- lambda三要素:形式参数,箭头,代码块。
格式:
()->{}//(形式参数) -> {代码块}
lambda使用前提:
1.必须时接口;
2.接口中有且仅有一个抽象方法。
简单的lambda表达式例子:
// 1. 不需要参数,返回值为 5
() -> 5
// 2. 接收一个参数(数字类型),返回其2倍的值
x -> 2 * x
// 3. 接受2个参数(数字),并返回他们的差值
(x, y) -> x – y
// 4. 接收2个int型整数,返回他们的和
(int x, int y) -> x + y
// 5. 接受一个 string 对象,并在控制台打印,不返回任何值(看起来像是返回void)
(String s) -> System.out.println(s)
比较:创建对象、匿名内部类和lambda的代码
public class TestLambda {
public static void main(String[] args) {
//1.创建EatImpl方式调用eat()方法
EatImpl e = new EatImpl();
useEat(e);
//2.匿名内部类
new Eat() {
@Override
public void eat() {
System.out.println("匿名内部类的eat");
}
}.eat();
//3.lambda
useEat(()->{
System.out.println("lambda的eat");
});
}
private static void useEat(Eat e){
e.eat();
}
}
//Eat接口
public interface Eat {
void eat();
}
//EatImpl实现类
class EatImpl implements Eat {
@Override
public void eat() {
System.out.println("EatImpl的eat");
}
}
以上代码的输出结果为:
EatImpl的eat
匿名内部类的eat
lambda的eat
可以看出我们创建对象的方式最麻烦,需要创建EatImpl类实现接口Eat,最简洁的方法就是使用lambda来实现接口的eat()方法。所以lambda表达式大大使代码变得简洁紧凑。
个人总结:
lambda表达式不需要实现类,而且只需要调用一个方法,传参然后写具体实现。方便很多, 不过它局限于只有一个抽象放的接口,我认为就是给多线程准备的,多线程 run方法就是一个抽象方法。