一、Lambda表達式
Java8提供了一種新的語法–Lambda表達式,可以將方法作為參數傳遞給其他方法,能夠極大的降低代碼的複雜度。Lambda表達式有三部分組成:參數列表、箭頭符和Lambda體。
第一部分:參數列表,可以為空或者包含一個或多個參數。
// 參數列表為空示例 () -> System.out.println("Hello Lambda!"); // 參數列表包含一個參數示例 (name) -> System.out.println("Hello " + name); // 參數列表包含多個參數示例 (n1, n2) -> System.out.println(n1 + n2);
第二部分:箭頭符「->」,將參數列表和Lambda體分隔開。
第三部分:Lambda體,包含了一個或多個語句,可以是一個表達式,也可以是一個代碼塊。
// Lambda表達式是一個表達式示例 (int x, int y) -> x + y // Lambda表達式是一個代碼塊示例 (int x, int y) -> { int sum = x + y; System.out.println(sum); }
二、Stream API
Java8引入了Stream API,是一種新的集合處理方式,能夠讓你更容易地使用集合。它提供了一種流式的處理方式,並行處理很方便。Stream API的核心是Stream介面,它包含了很多實用的操作方法,如過濾、映射、排序等操作。
使用Stream API,可以將循環和過濾操作只用一行代碼實現,例如:
List list = Arrays.asList("apple", "banana", "orange"); list.stream() .filter(s -> s.startsWith("a")) .map(String::toUpperCase) .sorted() .forEach(System.out::println);
上述代碼中,我們將一個字元串集合轉換為一個流,在這個流中過濾出以字母a開頭的字元串,將它們轉換為大寫並排序輸出。
三、介面的默認方法
Java8允許在介面中添加默認方法,這些方法可以在介面的實現類中直接使用,無需再次實現。介面的默認方法只有在實現類中沒有自己的同名方法時才會被調用。
public interface MyInterface { default void myDefaultMethod() { System.out.println("This is a default method."); } } public class MyClass implements MyInterface { // 無需再次實現myDefaultMethod()方法 }
四、方法引用
Java8中,方法引用是一種特殊的Lambda表達式,它使用::指示符,可以讓代碼更加簡潔易讀。
方法引用分為4種類型:
- 靜態方法引用。例如:Math::max。
- 實例方法引用。例如:String::toUpperCase。
- 構造函數引用。例如:ArrayList::new。
- 超類方法引用。例如:super::toString。
使用方法引用可以將Lambda表達式中的代碼更加簡潔易懂,例如:
List list = Arrays.asList(1, 2, 3); list.stream().forEach(System.out::println);
上述代碼中,我們可以使用方法引用System.out::println代替Lambda表達式(t -> System.out.println(t)),使代碼更加簡潔。
五、Optional類
Java8引入了Optional類,它是一個容器類型,可以包含一個對於某個類型的值或者代表該值不存在的null。
Optional類的主要方法如下:
- Optional.of(T value):創建一個Optional實例,value不能為null。
- Optional.empty():創建一個空的Optional實例。
- Optional.ofNullable(T value):創建一個Optional實例,value可以為null。
- isPresent():判斷Optional實例是否包含值。
- get():獲取Optional實例包含的值,前提是該值存在。
Optional類可以幫助我們更好地處理null,如下面的例子:
Integer value1 = null; Integer value2 = 10; Optional opt1 = Optional.ofNullable(value1); Optional opt2 = Optional.of(value2); System.out.println(opt1.orElse(0) + opt2.get());
上述代碼中,我們使用Optional類來避免空指針異常。如果value1為空,則opt1包含的值為null,調用orElse(0)方法返回0;如果value2不為空,則使用opt2.get()方法獲取opt2包含的值。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/246217.html