GlueArrays is used for iterating over an array of arrays, and it looks like this:
Main.java
import java.util.Iterator;
import java.util.NoSuchElementException;
public class Main {
public static class GlueArrays<T> implements Iterable<T> {
private final T[][] arrays;
public GlueArrays(T[]... arrays) {
this.arrays = arrays;
}
@Override
public Iterator<T> iterator() {
return new GlueArrayIterator(arrays);
}
private static class GlueArrayIterator<T> implements Iterator<T> {
private final T[][] arrays;
private int arrayIndex = 0;
private int localIndex = 0;
GlueArrayIterator(T[][] arrays) {
this.arrays = arrays;
}
@Override
public boolean hasNext() {
if (arrayIndex == arrays.length) {
return false;
}
return arrayIndex < arrays.length ||
localIndex < arrays[arrayIndex].length;
}
@Override
public T next() {
if (!hasNext()) {
throw new NoSuchElementException("Nothing to iterate.");
}
T returnValue = arrays[arrayIndex][localIndex];
if (localIndex < arrays[arrayIndex].length) {
localIndex++;
if (localIndex == arrays[arrayIndex].length) {
localIndex = 0;
arrayIndex++;
}
}
return returnValue;
}
}
}
public static void main(String[] args) {
Number[] arr1 = {1, 2, 3};
Number[] arr2 = {4f, 5f, 6f};
Number[] arr3 = {7.0, 8.0, 9.0};
for (Number number : new GlueArrays<>(arr1, arr2, arr3)) {
System.out.println(number);
}
}
}
As always, any critique is welcome.