package ch.akuhn.util; public class GeneratorExamples { public static void main(String[] args) { Generator<Integer> fibonacci = new Generator<Integer>() { @Override public void run() { int a = 0, b = 1; while (true) { a = b + (b = a); yield(a); } } }; for (int x : fibonacci) { if (x > 20000) break; System.out.println(x); } System.out.println("done\n"); Generator<Character> hello = new Generator<Character>() { @Override public void run() { String str = "Hello, Worlds!"; for (int n = 0; n < str.length(); n++) { yield(str.charAt(n)); } } }; for (char each : hello) { System.out.println(each); } System.out.println("done\n"); Character[] array = { 'a', 'b', 'c', 'd', 'e', 'f' }; int tally = 0; for (Character[] each : permute(array)) { Out.puts(each); tally++; } Out.puts(tally); } public static <T> Generator<T[]> permute(final T[] a) { return new Generator<T[]>() { private void permute(int n) { if (n == 0) yield(a.clone()); else for (int k = n; k >= 0; k--) { swap(n, k); permute(n - 1); swap(n, k); } } @Override public void run() { permute(a.length - 1); } private void swap(int n, int m) { T temp = a[n]; a[n] = a[m]; a[m] = temp; } }; } }