函數語言程式設計 - 無窮流



集合是在記憶體中儲存資料的結構,其中所有元素都存在於集合中,並且我們具有外部迭代來遍歷集合,而流是一個固定資料結構,其中元素按需計算,並且流具有內建迭代來遍歷每個元件。以下示例顯示如何從陣列建立流。

int[] numbers = {1, 2, 3, 4};
IntStream numbersFromArray = Arrays.stream(numbers);

上面的流是從一個包含四個數字的陣列構建的固定大小,並且在第 4 個元素之後不會返回元素。但是,我們可以使用 Stream.iterate() 或 Stream.generate() 方法建立流,該方法可以將 lamdba 表示式傳遞給 Stream。使用 lamdba 表示式,我們可以傳遞一個條件,一旦滿足該條件,就會給出所需的元素。考慮一種情況,我們需要一個數字列表,它們是 3 的倍數。

示例 - 無限流

import java.util.stream.Stream;

public class FunctionTester {    
   public static void main(String[] args) {
      //create a stream of numbers which are multiple of 3 
      Stream<Integer> numbers = Stream.iterate(0, n -> n + 3);

      numbers
         .limit(10)
         .forEach(System.out::println);
   }   
}

輸出

0
3
6
9
12
15
18
21
24
27

為了對無限流進行操作,我們使用了 Stream 介面的 limit() 方法來限制在計數變為 10 時對數字的迭代。

廣告
© . All rights reserved.