首頁  >  文章  >  Java  >  Java8中lambda表達式語法介紹

Java8中lambda表達式語法介紹

黄舟
黄舟原創
2017-09-19 10:39:381575瀏覽

眾所周知lambda表達式是JAVA8中提供的一種新的特性,它支援Java也能進行簡單的「函數式程式設計」。 以下這篇文章主要跟大家介紹了關於Java8學習教學課程lambda表達式語法的相關資料,需要的朋友可以參考下。

前言

相信大家都知道,在Java8 中引入了lambda 表達式,從行為參數化的角度,在使用時,將行為作為參數,去除包圍在外層的不必要的類別聲明,使程式碼更加簡潔。

lambda 表達式的語法

lambda 表達式由參數,->,以及函數體三部分組成。其實函數體可以是表達式,也可以是語句。語句應該包含在{} 裡,而表達式不能。

lambda 表達式範例


#
(List<String> list) -> list.isEmpty() // 布尔类型表达式
() -> new Apple(10) // 创建一个新对象
(Apple a) -> { System.out.println(a.getWeight()); } // 使用一个对象的属性
(String s) -> s.length() // 选择或提取一个对象的属性
(int a, int b) -> a * b // 组合两个参数
(Apple a1, Apple a2) -> a1.getWeight().compareTo(a2.getWeight()) // 比较两个对象

行為參數化




#可以看到,lambda 表達式著重表達了行為。其實在java8 之前,就已經有類似將行為作為參數處理的例子:

#
// java.util.Comparator
public interface Comparator<T> {
 public int compare(T o1, T o2);
}


inventory.sort(new Comparator<Apple>() {
 public int compare(Apple a1, Apple a2){
 return a1.getWeight().compareTo(a2.getWeight());
 }
});

在上面的例子中,定義了一個Comparator 接口,並且定義了compare 方法。 List 類型的 inventory,定義了 sort 方法,該方法以 Comparator 作為參數。在使用時,產生一個匿名或不匿名的 Comparator 對象,該物件實作了 compare 方法,指定了具體的比較行為,再將 Comparator 物件作為參數,傳給 sort 方法。實際上的作用,就是將比較行為,作為參數,傳給 sort 方法,這種想法和做法就叫作「行為參數化」。一個使用的方法(例如 sort 方法)可以對應多種行為,當需要更改行為時,只需要修改表示行為的程式碼,使用方不必做出修改,增加了程式碼的健全性。

匿名內部類別

而像上面的範例中,直接new 一個Comparator 類型對象,而沒有定義一個變數保存該物件的引用,叫做使用匿名內部類別。在匿名內部類別的情況下,由於方法不能重複使用,可以更明顯地看到程式碼的冗餘。因為每次在使用時需要手動 new 一個對象,並且還要寫出 compare 方法的簽名,而真正有用的其實只是 compare 的方法體。在 Java8 中,使用 lambda 表達式,可以簡化這些程式碼。例如上面的sort 方法的使用,可以簡化為:


inventory.sort((Apple a1, Apple a2) -> a1.getWeight().compareTo(a2.getWeight() ) );

定義執行緒的範例:

# #

Thread t = new Thread(new Runnable() {
 public void run(){
 System.out.println("Hello world");
 }
});

可以簡化為:

Thread t = new Thread(() -> System.out.println("Hello world"));
GUI 中點擊事件的範例:

Button button = new Button("Send");
button.setOnAction(new EventHandler<ActionEvent>() {
 public void handle(ActionEvent event) {
  label.setText("Sent!!");
 }
 });
可以簡化為:

#########
Button button = new Button("Send");
button.setOnAction((ActionEvent event) -> label.setText("Sent!!"));
###可以看出,lambda 表達式更加簡潔,也可以使開發者在讀寫程式碼時,可以更專注在定義的行為上。 ############小結############這篇文章介紹了lambda 表達式的語法,引入lambda 表達式的使用場景,以及使用lambda 表達式的好處。我們將在下篇文章中講解如何定義和使用 lambda 表達式,以及與其它語言相比,lambda 表達式在 Java 中的特殊規範。 ############總結##########

以上是Java8中lambda表達式語法介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn