Jak zdefiniować iterator tablicowy udostępniający co k-ty element tablicy, rozpoczynając od elementu o indeksie poc? Napisałem coś takiego:
package iterators;
public interface Iterator {
public void previous();
public void next();
public void first();
public void last();
public boolean isDone();
public Object current();
}
package iterators;
public interface Predicate {
public boolean accept(Object ob);
}
I klasa, w ktorej robie iterator filtrujacy, majacy za zadanie wlasnie udostepniac ten co k-ty element:
package iterators;
public class FilterIterator implements Iterator, Predicate {
private final Iterator _it;
private final Predicate _pred;
public FilterIterator(Iterator it, Predicate pred) {
_it=it;
_pred=pred;
}
public void filterForwards() {
while(!_it.isDone() && !_pred.accept(_it.current())) _it.next();
}
public void filterBackwards() {
while(!_it.isDone() && !_pred.accept(_it.current())) _it.previous();
}
public void previous() {
_it.previous();
filterBackwards();
}
public void next() {
_it.next();
filterForwards();
}
public void first() {
_it.first();
filterForwards();
}
public void last() {
_it.last();
filterBackwards();
}
public boolean isDone() {
return _it.isDone();
}
public Object current() {
return _it.current();
}
public boolean accept(Object ob) {
//TODO
}
}
Wydaje mi sie, ze musze teraz w metodzie accept jakos napisac kod, ktory bedzie odrzucal elementy inne niz ten co k-ty. Operuje na tablicy, tak jak w tytule napisalem. Tylko jak to zrobic?