函数式编程 - 无限流
集合是内存中的数据结构,其中包含集合中的所有元素,我们有外部迭代来遍历集合,而流是一种固定的数据结构,其中元素是按需计算的,并且流具有内置迭代来遍历每个元素。以下示例显示了如何从数组创建流。
int[] numbers = {1, 2, 3, 4}; IntStream numbersFromArray = Arrays.stream(numbers);
上述流的大小固定,由四个数字组成的数组构建,并且不会返回第 4 个元素之后的元素。但是我们可以使用 Stream.iterate() 或 Stream.generate() 方法创建流,该方法可以将 lamdba 表达式传递给流。使用 lamdba 表达式,我们可以传递一个条件,一旦满足该条件,就会给出所需的元素。考虑一下这种情况,我们需要一个 3 的倍数的数字列表。
示例 - 无限流
import java.util.stream.Stream; public class FunctionTester { public static void main(String[] args) { //创建一个 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 时。