Iterator tablicowy

0

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?

0

Mógłbyś w next dać coś w stylu:

currentIndex += k

oraz analogicznie w previous:

currentIndex -= k

Oczywiście musisz sprawdzać, czy currentIndex nie przekroczył zakresu tablicy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1