一、Lambda概述
1、函数式编程思想
拿数据做操作,有悖于面对对象操作
强调做什么,而不是过程
2、Lambda使用前提
有一个接口
接口只有一个抽象方法
二、Lambda标准格式
(形式参数) -> {代码块}
():形式参数
->:箭头
{}:代码块
三、Lambda使用
1、无参无返
public interface test1 {
void domain();
}
public class doDemo1 {
public static void main(String[] args) {
doDoMain(() -> System.out.println("domain"));
}
public static void doDoMain(test1 t){
t.domain();
}
}
2、带参无返
public interface test2 {
void domain(String s);
}
public class doDemo2 {
public static void main(String[] args) {
doDoMain((String s) -> {
System.out.println(s);
});
doDoMain((s) -> System.out.println(s));
doDoMain(s -> System.out.println(s));
}
public static void doDoMain(test2 t) {
t.domain("domain");
}
}
3、带参有返
public interface test3 {
int add(int a, int b);
}
public class doDemo3 {
public static void main(String[] args) {
doAdd((int a, int b) -> {
return a + b;
});
doAdd((a, b) -> a + b);
}
public static void doAdd(test3 t) {
int sum = t.add(10, 20);
System.out.println(sum);
}
}
4、使用说明
1)Lambda的实现
先使用方法,后定义方法体
2)关于lambda的省略
- 形式参数类型可以省略,但是”不患寡而患不均“
- 形式参数如果只有一个可以省略小括号
- 代码块如果只有一条,可以省略大括号和分号(对于return语句,需要省略掉return)
3)上下文环境
必须有上下文环境,才能推导出lambda对应的接口
- 局部变量的赋值
- 调用方法的参数
四、Lambda与匿名内部类的区别
1、所需类型不同
匿名内部类:接口、抽象类、具体类
Lambda:接口
2、使用限制不同
匿名内部类:无抽象方法个数限制
Lambda:只能有一个抽象方法
3、实现原理不同
匿名内部类:产生一个class字节码文件
Lambda:字节码动态生成