import java.util.Iterator;
/**
* Iterates over Cartesian product for an array of Iterables,
* Returns an array of Objects on each step containing values from each of the Iterables.
*
* @author
This e-mail address is being protected from spambots. You need JavaScript enabled to view it
* @created 01-08-2010
*/
public class CartesianIterator implements Iterator
import java.util.Arrays;
import junit.framework.TestCase;
import util.Strings;
import util.collect.CartesianIterator;
public class CartesianIteratorTest extends TestCase {
public void test_empty() throws Exception {
CartesianIterator it = new CartesianIterator();
assertFalse(it.hasNext());
try {
assertEquals("", Strings.join("",it.next()));
fail("Should throw NoSuchElementException");
} catch (Exception e) { /* Ignore exception */ }
}
public void test_0() throws Exception {
CartesianIterator it = new CartesianIterator(
Arrays.asList(new String[] {}));
assertFalse(it.hasNext());
try {
assertEquals("", Strings.join("",it.next()));
fail("Should throw NoSuchElementException");
} catch (Exception e) { /* Ignore exception */ }
}
public void test_1() throws Exception {
CartesianIterator it = new CartesianIterator(
Arrays.asList(new String[] {"a"}));
assertTrue(it.hasNext());
assertEquals("a", Strings.join("",it.next()));
assertFalse(it.hasNext());
}
public void test_2() throws Exception {
CartesianIterator it = new CartesianIterator(
Arrays.asList(new String[] {"a", "b"}));
assertTrue(it.hasNext());
assertEquals("a", Strings.join("",it.next()));
assertTrue(it.hasNext());
assertEquals("b", Strings.join("",it.next()));
assertFalse(it.hasNext());
}
public void test_2_0() throws Exception {
CartesianIterator it = new CartesianIterator(
Arrays.asList(new String[] {"a", "b"}),
Arrays.asList(new String[] {}));
assertFalse(it.hasNext());
try {
assertEquals("", Strings.join("",it.next()));
fail("Should throw NoSuchElementException");
} catch (Exception e) { /* Ignore exception */ }
}
public void test_2_2() throws Exception {
CartesianIterator it = new CartesianIterator(
Arrays.asList(new String[] {"a", "b"}),
Arrays.asList(new String[] {"c", "d"}));
assertTrue(it.hasNext());
assertEquals("ac", Strings.join("",it.next()));
assertTrue(it.hasNext());
assertEquals("ad", Strings.join("",it.next()));
assertTrue(it.hasNext());
assertEquals("bc", Strings.join("",it.next()));
assertTrue(it.hasNext());
assertEquals("bd", Strings.join("",it.next()));
assertFalse(it.hasNext());
}
public void test_2_3_4() throws Exception {
CartesianIterator it = new CartesianIterator(
Arrays.asList(new String[] {"a", "b"}),
Arrays.asList(new String[] {"c", "d", "e"}),
Arrays.asList(new String[] {"f", "g", "h", "i"}));
assertTrue(it.hasNext());
assertEquals("acf", Strings.join("",it.next()));
assertTrue(it.hasNext());
assertEquals("acg", Strings.join("",it.next()));
assertEquals("ach", Strings.join("",it.next()));
assertEquals("aci", Strings.join("",it.next()));
assertEquals("adf", Strings.join("",it.next()));
assertEquals("adg", Strings.join("",it.next()));
assertEquals("adh", Strings.join("",it.next()));
assertEquals("adi", Strings.join("",it.next()));
assertEquals("aef", Strings.join("",it.next()));
assertEquals("aeg", Strings.join("",it.next()));
assertEquals("aeh", Strings.join("",it.next()));
assertEquals("aei", Strings.join("",it.next()));
assertEquals("bcf", Strings.join("",it.next()));
assertEquals("bcg", Strings.join("",it.next()));
assertEquals("bch", Strings.join("",it.next()));
assertEquals("bci", Strings.join("",it.next()));
assertEquals("bdf", Strings.join("",it.next()));
assertEquals("bdg", Strings.join("",it.next()));
assertEquals("bdh", Strings.join("",it.next()));
assertEquals("bdi", Strings.join("",it.next()));
assertEquals("bef", Strings.join("",it.next()));
assertEquals("beg", Strings.join("",it.next()));
assertEquals("beh", Strings.join("",it.next()));
assertTrue(it.hasNext());
assertEquals("bei", Strings.join("",it.next()));
assertFalse(it.hasNext());
}
}
Read more: http://feeds.dzone.com/~r/dzone/snippets/~3/x0Vy9US5UQI/11959