目錄
1、定義
2、作用
3、文法
4、Lambda 表達式執行個體
5、Kotlin的Lambda實作方式
1、定義
- Lambda 表達式,也可稱為閉包。(其本質就是匿名函數)
2、作用
- 使用 Lambda 表達式可以使代碼變的更加簡潔緊湊。
- Lambda 允許把函數作為一個方法的參數(函數作為參數傳遞進方法中)。
- Lambda 表達式免去了使用匿名方法的麻煩,并且給予Java簡單但是強大的函數化的程式設計能力。
3、文法
lambda 表達式的文法格式如下:
//參數 -> 函數
(parameters) -> expression
以下是lambda表達式的重要特征:
- 可選類型聲明:不需要聲明參數類型,編譯器可以統一識别參數值。
- 可選的參數圓括号:一個參數無需定義圓括号,但多個參數需要定義圓括号。
- 可選的大括号:如果主體包含了一個語句,就不需要使用大括号。
- 可選的傳回關鍵字:如果主體隻有一個表達式傳回值則編譯器會自動傳回值,大括号需要指定明表達式傳回了一個數值。
4、Lambda 表達式執行個體
Lambda 表達式的簡單例子:
// 1. 不需要參數,傳回值為 5
() -> 5
// 2. 接收一個參數(數字類型),傳回其2倍的值
x -> 2 * x
// 3. 接受2個參數(數字),并傳回他們的內插補點
(x, y) -> x – y
// 4. 接收2個int型整數,傳回他們的和
(int x, int y) -> x + y
// 5. 接受一個 string 對象,并在控制台列印,不傳回任何值(看起來像是傳回void)
(String s) -> System.out.print(s)
在 Java8Tester.java 檔案輸入以下代碼:
5、Kotlin的Lambda實作方式
/**
* 在Java中new Thread()的實作方式
* @param args
*/
public static void main(String[] args) {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
}
});
thread.start();
}
----------------------------------------------------------------------
/**
*在Kotlin中,我們可以通過Lambda閉包的形式對這段代碼進行縮寫
* 注意:
* 1、如果Lambda沒有參數的話,可以省略箭頭
* 2、如果使用Lambda參數的這個函數,隻有一個參數,且這個參數可以用Lambda表示,那麼就可以省略小括号
* 3、如果使用Lambda參數的這個函數,有過個參數,但是Lambda參數是最後一個參數,那麼函數可以用()+{}的形式表示
*/
fun main() {
// 1、正常形式
val thread = Thread(Runnable { println("hello") })
// 2、箭頭 + 函數
val thread1 = Thread({ -> println("hello1") })
// 3、因為new Runnable()沒有參數,是以我們可以省略那個箭頭
val thread2 = Thread({ println("hello2") })
// 4、因為public Thread(Runnable target)隻有target這一個參數,且這個參數是可以用Lambda表示,那麼我們可以省略小括号
val thread3 = Thread { println("hello3") }
// 5、因為public Thread(Runnable target),因為參數targer是最後一個參數,我們也可以用()+{}的形式來表示
val thread4 = Thread() { println("hello4") }
thread.start()
thread1.start()
thread2.start()
thread3.start()
}