package edu.ucsd.arcum.util;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class Subset<T> implements Iterable<T>
{
private Collection<?> collection;
private Class<T> clazz;
// shorthand to avoid saying the type twice
public static <X, T extends X> Subset<T> subset(Collection<X> givenCollection,
Class<T> clazz)
{
return new Subset<T>(givenCollection, clazz);
}
public Subset(Collection<?> givenCollection, Class<T> clazz) {
this.collection = givenCollection;
this.clazz = clazz;
}
public Iterator<T> iterator() {
ArrayList<T> subset = extractSubset();
return subset.iterator();
}
@Override
public String toString() {
return extractSubset().toString();
}
private ArrayList<T> extractSubset() {
ArrayList<T> subset = new ArrayList<T>();
for (Object element : collection) {
if (element != null && clazz.isAssignableFrom(element.getClass())) {
subset.add(clazz.cast(element));
}
}
return subset;
}
}