目錄
一、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方法中報錯,也就驗證了我們上面的猜想