Java 8 Lambda 表達式

本博客關於JDK1.8新特性介紹的目錄在這裏,歡迎點擊

Lambda 表達式,也可稱爲閉包,它是推動 Java 8 發佈的最重要新特性。

Lambda 允許把函數作爲一個方法的參數(函數作爲參數傳遞進方法中)。

使用 Lambda 表達式可以使代碼變的更加簡潔緊湊。

語法
lambda 表達式的語法格式如下:

(parameters) -> expression
或
(parameters) ->{ statements; }

以下是lambda表達式的重要特徵:

  • 可選類型聲明: 不需要聲明參數類型,編譯器可以統一識別參數值
  • 可選的參數圓括號: 一個參數無需定義圓括號,但多個參數需要定義圓括號
  • 可選的大括號: 如果主體包含了一個語句,就不需要使用大括號
  • 可選的返回關鍵字: 如果主體只有一個表達式返回值則編譯器會自動返回值,大括號需要指定明表達式返回了一個數值

以上是官網對jdk 1.8 lambda的特徵描述。 早在年初的時候,就已經對java lambda表達式進行過初步的學習,不知道是不是個人問題,一直都有抗拒心理,“en,這個學起來好麻煩,好而且閱讀性不好啦,第二個人都很難看懂”。

其實並不然,下面通過實例進行演示,更直觀清晰。

Thread thread =  new Thread(new Runnable() {
		@Override
		public void run() {
			System.out.println("test-thread");
		}
});

引入lambda表達式後,則可以這麼寫

Thread thread = new Thread(() -> {System.out.println("test-thread");});

上述lambda表達式的語法:() -> {}(): 括號就是接口方法的括號,接口方法如果有參數,也需要寫參數。只有一個參數時,括號可以省略。-> : 分割左右部分的,沒啥好講的。{} : 要實現的方法體。只有一行代碼時,可以不加括號,可以不寫return。

瞭解了lambda大概的樣子我們繼續往下看

 Consumer<String> consumer = (x) -> System.out.println(x);
 consumer.accept("test");
BinaryOperator<Integer> binary = (x, y) -> x + y;
System.out.println(binary.apply(1, 2));

在上面的表達 式中,我們注意到 (x, y)這裏是沒有申明方法的參數類型的,卻能執行數學運算 +。
這裏根據函數接口指定的泛型類爲Integer,即可推斷方法的參數爲Integer,然後執行x + y。

示例就寫到這了,比較三個代碼塊不難看出,lambda確實能顯著減少代碼量,提高開發效率,而且代碼也很容易閱讀。

總結

Lambda表達式是一個匿名方法,簡化了匿名內部類的寫法,把模板語法屏蔽,突出業務語句,傳達的更像一種行爲。
Lambda表達式是有類型的,JDK內置了衆多函數接口
Lambda的3段式結構:(…)-> { …}

上述兩個塊分別介紹哦了一個參數和兩個參數lambda的使用示例。
但是爲什麼這三個類可以使用lambda表達式呢?
我們自定義的接口是否可以使用lambda表達式嗎?

帶着疑問,我們移步函數式接口章節

發佈了17 篇原創文章 · 獲贊 41 · 訪問量 6286
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章