Lambda表達式本質上是一種匿名方法,它沒有方法名、沒有修飾符、沒有返回值類型,使得編寫代碼更加簡潔。
只要有一個待實現方法的接口就可以使用Lambda表達式。注意:是只能有一個需要被實現的方法,不是規定接口中只能有一個方法
本質上是將這唯一待實現的方法用來代替接口,或者說是代替在具體業務邏輯代碼中實現接口的匿名類。因爲既然匿名類需要實現這個接口,而這個接口中又只含有唯一一個需要實現的方法,那麼就可以通過此方法直接代替該匿名類了。
例子一:
//開啓線程傳統寫法
new Thread(new Runnable() {
@Override
public void run() {
//具體處理邏輯
}
}).start();
//開啓線程 Lambda 表達式
new Thread(() -> {
//具體處理偶偶機
}).start();
例子二:
自定義一個接口,再使用 Lambda 表達式的方式進行實現。
/**
* 定義一個接口
*/
public interface MyListener {
//注意,該方法有返回值,有參數
String doSomething(String a,int b);
}
//Lambda 表達式寫法
MyListener myListneer2 = (String a,int b) -> {
return a + b;
};
/*
還可以精簡成這樣
這裏,Java 會自動判斷出 a 和 b 的數據類型
*/
MyListener myListener2 = (a, b) -> {
return a + b;
};
假如有一個方法,需要傳入 MyListener 接口
public void hello(MyListener mListener) {
String a = "Hello Lambda";
int b = 1024;
String result = mListener.doSomething(a, b);
Log.d(TAG, "hello: " + result);
}
//傳統寫法
hello(new MyListener() {
@Override
public String doSomething(String a, int b) {
return a + b;
}
});
//Lambda 表達式
hello((a, b) -> {
return a + b;
});
例子參考於第一行代碼