在 Java 中创建生成器
Sheeraz Gul
2023年10月12日
生成器是创建迭代器的简单方法。它可以被描述为一次可以迭代一个值的对象或数据。
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
作者: Sheeraz Gul
Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.
LinkedIn Facebook