Java SE 8 Lambda 表達式入門指南
Java SE 8 引入了 Lambda 表達式,讓 Java 程式碼更簡潔、直觀,特別是在集合操作和函數式編程中發揮重要作用。本文將介紹 Lambda 表達式的基本語法、應用場景及實作範例。
1. Lambda 表達式的基本語法
Lambda 表達式的基本語法如下:
(parameters) -> expression
// 或
(parameters) -> { statements; }
parameters
:參數列表,可以省略類型聲明,當只有一個參數時,括號也可省略。->
:Lambda 運算符,表示參數與方法體的關係。expression
或{ statements; }
:方法體,若是單一表達式則可省略{}
。
範例:
// 無參數,回傳固定值
() -> 42;
// 單個參數,回傳其平方值
x -> x * x;
// 多個參數,回傳其加總值
(x, y) -> x + y;
// 帶有類型的參數
(int x, int y) -> x * y;
// 使用代碼區塊
(x, y) -> {
int sum = x + y;
return sum * 2;
};
2. Lambda 表達式的應用場景
Lambda 表達式最常用於:
2.1 Java 內建函數式介面
Java 8 引入了一些常見的函數式介面,可與 Lambda 表達式配合使用:
介面 | 方法 | 作用 |
---|---|---|
Predicate<T> |
boolean test(T t) |
測試條件,回傳 true/false |
Function<T, R> |
R apply(T t) |
轉換 T 類型數據為 R |
Consumer<T> |
void accept(T t) |
接收 T 類型數據執行操作 |
Supplier<T> |
T get() |
提供 T 類型數據 |
示例:
import java.util.function.Predicate;
public class LambdaExample {
public static void main(String[] args) {
Predicate<String> isLongerThanFive = s -> s.length() > 5;
System.out.println(isLongerThanFive.test("Hello")); // false
System.out.println(isLongerThanFive.test("Lambda")); // true
}
}
2.2 在集合 (Collections) 中的應用
Lambda 可用於 List
操作,例如過濾、排序、映射 (mapping) 等。
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class LambdaCollection {
public static void main(String[] args) {
List<String> names = Arrays.asList("Alice", "Bob", "Amanda", "Charlie");
// 過濾以 "A" 開頭的名字
List<String> filteredNames = names.stream()
.filter(name -> name.startsWith("A"))
.collect(Collectors.toList());
System.out.println(filteredNames); // [Alice, Amanda]
}
}
3. Lambda 與方法參考 (Method Reference)
當 Lambda 只是一個簡單的方法調用時,可以使用方法參考來簡化程式碼。
3.1 靜態方法參考
import java.util.Arrays;
import java.util.List;
public class MethodReference {
public static void main(String[] args) {
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
names.forEach(System.out::println); // 使用方法參考
}
}
等同於:
names.forEach(name -> System.out.println(name));
3.2 物件實例方法參考
public class StringUtils {
public void print(String s) {
System.out.println(s);
}
public static void main(String[] args) {
StringUtils utils = new StringUtils();
List<String> words = Arrays.asList("Java", "Lambda", "Stream");
words.forEach(utils::print);
}
}
4. Lambda 在執行緒 (Thread) 中的應用
Java 8 之前的匿名內部類:
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("執行緒開始運行");
}
}).start();
Lambda 簡化後的寫法:
new Thread(() -> System.out.println("執行緒開始運行")).start();
5. 結論
Lambda 表達式讓 Java 變得更加簡潔且易於閱讀,尤其是在處理集合、函數式編程和多執行緒操作時。透過 Java 內建的 函數式介面,我們可以更高效地編寫程式,提高開發效率。
希望這篇文章能幫助你更好地理解 Java 8 的 Lambda 表達式!
參考連結: