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