package com.interview.books.svinterview; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.NoSuchElementException; /** * Created_By: stefanie * Date: 14-12-14 * Time: 下午5:07 */ public class SV25_ComplexIterator<T> implements Iterator<T> { static interface Data<T>{ public boolean isCollection(); public Collection<Data<T>> getCollection(); public T getElement(); } private int _curIdx; private ArrayList<T> flatColl; public SV25_ComplexIterator(Collection<Data<T>> c){ _curIdx = 0; flatColl = new ArrayList<>(); flatElements(c); } private void flatElements(Collection<Data<T>> c){ for(Data<T> item : c){ if(item.isCollection()){ flatElements(item.getCollection()); } else { flatColl.add(item.getElement()); } } } @Override public boolean hasNext() { return null != flatColl && _curIdx < flatColl.size(); } @Override public T next() { if(null == flatColl || _curIdx >= flatColl.size()) throw new NoSuchElementException(); return flatColl.get(_curIdx++); } @Override public void remove() { throw new NoSuchMethodError(); } }