Java8是Java語言發行版的一個主要版本,Java8於2014年3月發布,引入了許多新功能和語言特性。其中,最受歡迎和最重要的之一就是Lambda表達式。
一、Lambda表達式
以前編寫Java代碼時,通常需要在匿名內部類中編寫大量的代碼來調用介面的方法。使用Lambda表達式後,可以使用一種簡潔而且簡單的形式編寫函數式介面的實現。
// 使用匿名內部類 new Thread(new Runnable() { @Override public void run() { System.out.println("Hello World"); } }).start(); // 使用Lambda表達式 new Thread(() -> System.out.println("Hello World")).start();
Lambda表達式的語法由三部分組成:
- 參數列表
- 箭頭符號(->)
- 方法體
Lambda表達式可以被用來代替函數式介面的任意實現。
二、方法引用
Java8中的方法引用是一種簡潔的語法,可以用來簡化Lambda表達式的實現。通常情況下,如果Lambda表達式中的代碼只是對方法的調用,就可以使用方法引用。
方法引用有四種形式:
- 引用靜態方法
- 引用對象的方法
- 引用自己的方法
- 引用構造函數
這裡有一個全部四種情況都包含的例子:
@FunctionalInterface interface Converter { T convert(F from); } class Something { String startsWith(String s) { return String.valueOf(s.charAt(0)); } } Something something = new Something(); Converter converter1 = something::startsWith; String converted1 = converter1.convert("Java"); System.out.println(converted1); // 輸出 "J" Converter converter2 = String::valueOf; String converted2 = converter2.convert(17); System.out.println(converted2); // 輸出 "17"
三、Stream API
Stream是Java8中的一個新類,它允許在集合上進行流處理。Stream API提供了很多新的方法,可以使用流來對集合進行過濾、映射和排序等操作。
下面是使用Stream API對集合進行過濾的例子:
List names = Arrays.asList("Fred", "Wilma", "Betty", "Barney"); names.stream() .filter(name -> name.startsWith("B")) .forEach(System.out::println);
上面的代碼會輸出以下內容:
Betty Barney
四、日期/時間 API
Java8中引入了新的日期/時間API。在以前的版本中,Java的日期/時間API非常難以使用,而且不夠靈活。新的日期/時間API提供了一個易於使用和更加靈活的介面。
下面是創建日期對象的示例代碼:
LocalDate date = LocalDate.now(); System.out.println("Today's date: " + date);
上面的代碼將輸出類似下面的內容:
Today's date: 2021-10-09
五、默認方法
默認方法是Java8中新增的一個語言特性,它允許在介面中定義一個帶有默認實現的方法。這些方法可以由介面的所有實現類繼承。
下面是一個簡單的默認方法的例子:
interface Person { default void sayHello() { System.out.println("Hello!"); } } class Student implements Person {} new Student().sayHello(); // 輸出 "Hello!"
在上面的例子中,Person介面定義了一個默認方法sayHello(),Student類實現了這個介面同時繼承了sayHello()方法。
六、Optional類型
Java8中的Optional類型是一個容器類,可以用來表示一個值存在或不存在。這個類的主要作用是提供一種更加嚴格的方式來處理可能為空的值。
下面是使用Optional類型的例子:
Optional optional = Optional.of("Hello"); System.out.println(optional.isPresent()); // 輸出 "true" System.out.println(optional.get()); // 輸出 "Hello" System.out.println(optional.orElse("World")); // 輸出 "Hello" optional = Optional.empty(); System.out.println(optional.isPresent()); // 輸出 "false" System.out.println(optional.orElse("World")); // 輸出 "World"
上面的代碼中使用Optional.of()方法創建了一個非空的Optional對象。get()方法獲取Optional中的值,orElse()方法在Optional為空的情況下提供默認值。
結論
Java8引入了許多新功能和語言特性,包括Lambda表達式、方法引用、Stream API、日期/時間API、默認方法和Optional類型。這些新特性讓Java語言變得更加簡潔、靈活和易於使用。
原創文章,作者:PFLOG,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/372097.html