HOWTO · Java

在 Java 中创建生成器

本教程演示了如何在 Java 中创建生成器。

本页内容

生成器是创建迭代器的简单方法。它可以被描述为一次可以迭代一个值的对象或数据。

Java 没有为 Python 等生成器提供任何内置功能,但我们可以使用迭代器来创建一个。

本教程将演示如何在 Java 中创建生成器。

在 Java 中使用迭代器创建生成器

迭代器用于遍历多维数组,这意味着它们可以执行多层循环的功能。

package delftstack;
import java.util.Arrays;
import java.util.Iterator;
public class Java_Generator {
  public static void main(String args[]) {
    Integer[][][] Demo_Array =
        new Integer[][][] {{{1, 2, null, 3}, null, {4}}, null, {{5}, {6}, null, {7}}};

    Iterator<Integer> demo_iterator =
        Arrays.stream(Demo_Array)
            .filter(ab -> ab != null)
            .flatMap(ab
                -> Arrays.stream(ab)
                       .filter(ac -> ac != null)
                       .flatMap(ac -> Arrays.stream(ac).filter(ae -> ae != null)))
            .iterator();

    while (demo_iterator.hasNext()) {
      System.out.println(demo_iterator.next());
    }
  }
}

上面的代码遍历一个三维数组并打印忽略空值的值。

输出:

1
2
3
4
5
6
7

我们也可以直接使用 Stream 并设置逻辑以根据特定模式进行迭代。

package delftstack;
import java.util.Iterator;
import java.util.stream.*;
public class Java_Generator {
  public static void main(String args[]) {
    Iterator<Integer> Demo_Generator =
        Stream.iterate(new Integer[] {1, 2}, demo -> new Integer[] {demo[1], demo[0] + demo[1]})
            .map(demo -> demo[0])
            .iterator();

    // Print the first 10 elements according to the given iterator logic
    for (int x = 0; x < 10; x++) {
      System.out.println(Demo_Generator.next());
    }

    System.out.println("First Iteration for 10 elements is finished here, Now the next 10");

    // Print the first 10 elements according to the given iterator logic
    for (int x = 0; x < 10; x++) {
      System.out.println(Demo_Generator.next());
    }
  }
}

上面的代码创建了一个流,该流具有迭代数组中仅给出两个数字的数字的逻辑。

它根据新整数数组和 map() 函数中的逻辑生成更多数字,创建一个具有以下数字和前两个数字的序列。

输出:

1
2
3
5
8
13
21
34
55
89
First Iteration for 10 elements is finished here, Now the next 10
144
233
377
610
987
1597
2584
4181
6765
10946