package org.limewire.collection;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
/**
* Lets you iterate over many <code>Iterables</code> easily.
<pre>
LinkedList<String> activeList = new LinkedList<String>();
activeList.add("Abby");
activeList.add("Bob");
activeList.add("Chris");
LinkedList<String> inactiveList = new LinkedList<String>();
inactiveList.add("Anderson");
inactiveList.add("Baker");
for(String s : new MultiIterable<String>(activeList, inactiveList))
System.out.println(s.toLowerCase());
Output:
abby
bob
chris
anderson
baker
</pre>
*/
public class MultiIterable<T> implements Iterable<T> {
private final Iterable<? extends Iterable<? extends T>> iterables;
@SuppressWarnings("unchecked")
public MultiIterable(Iterable<? extends T> i1, Iterable<? extends T> i2) {
this.iterables = Arrays.asList(i1, i2);
}
@SuppressWarnings("unchecked")
public MultiIterable(Iterable<? extends T> i1, Iterable<? extends T> i2, Iterable<? extends T> i3) {
this.iterables = Arrays.asList(i1, i2, i3);
}
@SuppressWarnings("unchecked")
public MultiIterable(Iterable<? extends T> i1, Iterable<? extends T> i2, Iterable<? extends T> i3, Iterable<? extends T> i4) {
this.iterables = Arrays.asList(i1, i2, i3, i4);
}
/** Catch-all constructor. */
public MultiIterable(Iterable<? extends T>... iterables) {
this.iterables = Arrays.asList(iterables);
}
public MultiIterable(Iterable<? extends Iterable<? extends T>> iterables) {
this.iterables = iterables;
}
public Iterator<T> iterator() {
List<Iterator<? extends T>> iterators = new ArrayList<Iterator<? extends T>>();
for(Iterable<? extends T> iterable : iterables) {
iterators.add(iterable.iterator());
}
return new MultiIterator<T>(iterators);
}
}