简介
- Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。
- Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。
用法前提和语法
- 用法前提:
如果一个接口只存在一个方法且是抽象类方法,那这个接口为函数式接口。对于函数式接口,可以使用lambda表达式来创建该接口的对象。
- 语法格式如下:
(parameters) -> expression
或
(parameters) ->{ statements; }
作用
- 可以使代码变的更加简洁紧凑。
- 避免匿名内部类定义过多
例子
推导lambda表达式(内部类的简化过程)
// 推导lambda表达式
public class LambdaDemo {
// 3.静态内部类
static class Like2 implements ILike {
@Override
public void lambda() {
System.out.println("I like lambda2");
}
}
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 lambda3");
}
}
like = new Like3();
like.lambda();
// 5.匿名内部类:没有类的名称,必须借助接口或者父类
like = new ILike() {
@Override
public void lambda() {
System.out.println("I like lambda4");
}
};
like.lambda();
// 6.用lambda简化
like = ()->{
System.out.println("I like lambda5");
};
like.lambda();
}
}
// 1.定义一个函数式接口
interface ILike{
void lambda();
}
// 2.实现类
class Like implements ILike{
@Override
public void lambda() {
System.out.println("I like lambda");
}
}
带参数的情况以及lambda表达式的简化:
public class LambdaDemo2 {
public static void main(String[] args) {
// 匿名内部类
ILove love = new ILove() {
@Override
public void love(int a,int b) {
System.out.println("I love you:" + a);
}
};
// 匿名内部类变成lambda表达式形式
love = (int a,int b)->{
System.out.println("I love you:" + a);
};
// 简化1:去掉参数类型
//(多个参数也能去掉参数类型,要去掉就全去掉)
love = (a, b)->{
System.out.println("I love you:" + a);
};
// 简化2:去掉括号(多个参数的情况不能去掉括号,只有一个参数的情况就可以)
// love = a ->{
// System.out.println("I love you:" + a);
// };
// 简化3:去掉花括号(只有一行代码的情况下才能去掉花括号,多行代码要用代码块)
love = (a, b) -> System.out.println("I love you:" + a);
love.love(520,502);
}
}
interface ILove{
void love(int a,int b);
}
//class Love implements ILove{
// @Override
// public void love(int a,int b) {
// System.out.println("I love you:"+a);
// }
//}