package br.gov.mj.sislegis.app.parser;
import java.util.AbstractCollection;
import java.util.Iterator;
import java.util.List;
/**
* Wrapper para evitar ter que iterar sobre todo o resultado e converter. <br>
* Esta classe encapsula uma lista de K e retorna um iterator de E.
*
* @author coutinho
*
*
*/
public abstract class CollectionLazyConverter<E, K> extends AbstractCollection<E> {
private Iterator<E> iterator;
private Iterator<K> materiasIterator;
private int size = 0;
public CollectionLazyConverter(List<K> materias) {
super();
size = materias.size();
this.materiasIterator = materias.iterator();
iterator = new Iterator<E>() {
@Override
public boolean hasNext() {
return materiasIterator.hasNext();
}
@Override
public E next() {
return convertKtoE(materiasIterator.next());
}
};
}
protected abstract E convertKtoE(K next);
@Override
public Iterator<E> iterator() {
return iterator;
}
@Override
public int size() {
return size;
}
}