對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 是一個函式式語言+多核時代綜合影響的產物
函式式介面
具體可參考兩個文章 我感覺寫的不錯