目录
一、lambda解释
Lambda 表达式(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。Lambda表达式可以表示闭包(注意和数学传统意义上的不同)。
二、使用和原理说明
准备工作
public class LambdaTest {
void printLambda(String str,Print print){
print.printS(str);
}
}
public interface Print {
public void printS(String str);
}
1、不使用lambda表达式
public static void main(String[] args) {
LambdaTest lambdaTest = new LambdaTest();
Print print = new Print() {
@Override
public void printS(String str) {
System.out.println(str);
}
};
lambdaTest.printLambda("不使用lambda表达式",print);
}
运行结果
2、使用lambda表达式
标准写法,lambda表达式会到print接口中寻找是否含有一个传入参数为String类型的方法
LambdaTest lambdaTest = new LambdaTest();
Print print = (String str) -> {
System.out.println(str);
};
lambdaTest.printLambda("使用lambda表达式",print);
}
简化
LambdaTest lambdaTest = new LambdaTest();
Print print = str -> System.out.println(str);
lambdaTest.printLambda("使用lambda表达式",print);
最简化,lambda表达式会根据printLambda()方法里面需要的参数,找到对应的参数类型,找到传入的参数为一个的方法
public static void main(String[] args) {
LambdaTest lambdaTest = new LambdaTest();
lambdaTest.printLambda("使用lambda表达式",str -> System.out.println(str));
}
我们可以验证一下这个逻辑
给Print接口添加一个打印integer类型的方法
public interface Print {
public void printS(String str);
public void printI(Integer str);
}
这个时候main方法中报错,也就验证了我们上面的猜想