1. 程式人生 > >Java 8 中的 新特性Streams

Java 8 中的 新特性Streams

Stream 作為 Java 8 的一大亮點,它與 java.io 包裡的 InputStream 和 OutputStream 是完全不同的概念。 使用 Stream API 無需編寫一行多執行緒的程式碼,就可以很方便地寫出高效能的併發程式。所以說,Java 8 中首次出現的 java.util.stream 是一個函式式語言+多核時代綜合影響的產物.

java.util.stream 類以支援元素流上的函式式操作,例如集合上的map-reduce轉換,例如:

 int sum = widgets.stream()
                      .filter(b -> b.getColor() == RED)
                      .mapToInt(b -> b.getWeight())
                      .sum();

帶有顯式for迴圈的處理元素本質上是序列的。流通過將計算重構為聚合操作的管道,而不是每個單獨元素上的強制操作,從而促進並行執行。所有的流操作都可以序列或並行執行。JDK中的流實現建立序列流,除非顯式請求並行。例如,Collection有Collection.stream()和collections . parallelstream(),它們分別生成順序流和並行流;其它流軸承方式如IntStream。range(int, int)生成順序流,但是這些流可以通過呼叫它們的base .parallel()方法有效地並行化。要並行執行之前的“widget權重之和”查詢,我們需要:


     int sumOfWeights = widgets.parallelStream()
                               .filter(b -> b.getColor() == RED)
                               .mapToInt(b -> b.getWeight())
                               .sum();