The Iterable interface provides this functionality:
public class ProjectSet implements Iterable {
private ArrayList projects;
public ProjectSet() {
this.projects = new ArrayList();
}
// .. iteration methods ??
@Override
public Iterator iterator() {
return projects.iterator();
}
}
You can exchange the iterator logic as you need.