函数式编程 - 无穷流



集合是在内存中存储数据的结构,其中所有元素都存在于集合中,并且我们具有外部迭代来遍历集合,而流是一个固定数据结构,其中元素按需计算,并且流具有内置迭代来遍历每个元件。以下示例显示如何从数组创建流。

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 时对数字的迭代。

广告