JAVA8新功能
主要包含:
- Lambda 表達式 、方法引用、函數式接口和 默認方法。
最大改進是 在java語言和平臺支持Lambda 表達式。
- 日期和時間API
新的api使開發者用更自然,清楚,簡單的方式處理日期和時間。
- Nashhorn JavaScript 引擎
新的輕量級,高性能JavaScript引擎
1. Lambda 表達式
用過其它常用語言(scala .net等)的開發者,應該比較熟悉Lambda表達式,在Java語言中Lambda就是一個匿名方法,匿名方法沒有名稱 標識,只在需要的時候創建,經常作為其他方法的參數。
Lambda基本格式是
(parameters) -> expression
或者
(parameters) -> { statements; }
或者
() -> expression
或者
x-> expression
典型例子:
(x, y) -> x + y //返回 x加上y的值
(String s) -> System.out.print(s) // 接受一個 string 對象,並在控制檯打印
2. 函數式接口
函數式接口是指 只有一個抽象方法的接口或者類, 批註@FunctionalInterface表示這個是一個函數式接口,如果沒有滿足上面條件,編譯器會報錯。
例子:
@FunctionalInterface
public interface MyFirstFunctionalInterface{
void method();
}
java.util.function 類庫下面 增加了很多函數式接口類
- 後綴是Predicate 表示只有一個輸入 返回時boolean類型函數式接口。
- Function 接收一個參數 返回一個結果
- Supplier 沒有參數 返回一個結果
- Consumer 有一個參數,沒有結果
- 已Bi開頭表示有兩個參數的函數式
3.默認方法
java8為了支持lambda 表達式兼容舊代碼,可以在接口裡面定義默認方法並且有body實現.
默認方法有點違反接口的定義原則。接口裡面混入實現代碼。
例子:
public interface Moveable {
default void move(){
System.out.println("I am moving....");
}
}
4.Stream流
Stream提供一種機制來操作一個數據集。
操作包括 過濾 排序 映射 收集 轉換等, filter sort map distinct limit count collect summaryStatistics...
數據集來源:可以是集合 、數組、IO Channel、generator 產生器等。
Stream通過管道串聯在一起,通過訪問者模式實現對每一個元素操作
例子:
List<string>strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
// 獲取空字符串的數量
int count = strings.stream().filter(string -> string.isEmpty()).count();
/<string>
parallelStream 可以返回並行流,很容易實現併發操作。
5.日期時間api
新增 java.time類庫,舊的Date不是線程安全、結構混亂等已經捨棄。新增三個時間類 LocalDate, LocalTime and LocalDateTime.
例子:
LocalDateTime currentTime = LocalDateTime.now();//默認時區
System.out.println("當前時間: " + currentTime);
談論日期必須帶上時區否則就是耍流氓。時間戳不需要時區。
Timestamp Duration 和 Instant 持續時間 。
例子
Instant instant = Instant.now();
Instant instant1 = instant.plus(Duration.ofMillis(1000));
Duration duration = Duration.ofMillis(5000);
duration = Duration.ofMinutes(10);
JAVA8的這些新特性有提高你的生產力嗎?
更多資源請參考jdk文檔
閱讀更多 開源項目分享 的文章
關鍵字: 匿名 JavaScript 苦短