在 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