眾所周知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()) // 比较两个对象
行為參數化
#
// 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"));
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!!"));
以上是Java8中lambda表達式語法介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!