人生苦短,JAVA8提高效率的新特性

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文檔


分享到:


相關文章: