1. 程式人生 > >對jdk1.8最大新特性的總結

對jdk1.8最大新特性的總結

Lambda表示式

是Java 8新增的Lambda表示式中,變數和臨時程式碼塊的分隔符,即:

(變數) -> {程式碼塊}

如果程式碼塊只有一個表示式,大括號可以省略。如果變數型別可以自動推斷出來,可以不寫變數型別。

::是作用域的意思 ;

:: 左邊表示類或者物件, :: 右邊表示這個類或者物件作用域下的函式或者方法。

介紹lambda

Java 8的一個大亮點是引入Lambda表示式,使用它設計的程式碼會更加簡潔。當開發者在編寫Lambda表示式時,也會隨之被編譯成一個函式式介面。下面這個例子就是使用Lambda語法來代替匿名的內部類,程式碼不僅簡潔,而且還可讀。

不採用Lambda的老方法:

Runnable runnable1=new Runnable(){
@Override
public void run(){
    System.out.println("Running without Lambda");
}
};

使用Lambda:
Runnable runnable2=()->System.out.println(“Running from Lambda”);

正如你所看到的,使用Lambda表示式不僅讓程式碼變的簡單、而且可讀、最重要的是程式碼量也隨之減少很多。然而,在某種程度上,這些功能在Scala等這些JVM語言裡已經被廣泛使用。

例子計算平方數

List<Integer> nums = Arrays.asList(1, 2, 3, 4);
List<Integer> squareNums = nums.stream().
map(n -> n * n).
collect(Collectors.toList());

這段程式碼生成一個整數 list 的平方數 {1, 4, 9, 16}。

Streams API 詳解

Stream 作為 Java 8 的一大亮點,它與 java.io 包裡的 InputStream 和 OutputStream 是完全不同的概念。它也不同於 StAX 對 XML 解析的 Stream,也不是 Amazon Kinesis 對大資料實時處理的 Stream。Java 8 中的 Stream 是對集合(Collection)物件功能的增強,它專注於對集合物件進行各種非常便利、高效的聚合操作(aggregate operation),或者大批量資料操作 (bulk data operation)。Stream API 藉助於同樣新出現的 Lambda 表示式,極大的提高程式設計效率和程式可讀性。同時它提供序列和並行兩種模式進行匯聚操作,併發模式能夠充分利用多核處理器的優勢,使用 fork/join 並行方式來拆分任務和加速處理過程。通常編寫並行程式碼很難而且容易出錯, 但使用 Stream API 無需編寫一行多執行緒的程式碼,就可以很方便地寫出高效能的併發程式。所以說,Java 8 中首次出現的 java.util.stream 是一個函式式語言+多核時代綜合影響的產物

函式式介面

具體可參考兩個文章 我感覺寫的不錯