Я использую этот BoundedIterator как внутренний итератор в одном из своих приложений.Ограниченный итератор - ограничение и смещение
Используя его, чтобы сделать существующий Iterator
ограничен:
public DBCursor limit(Integer limit){
this.max = limit;
this._it = new BoundedIterator<DBObject>(this.offset, this.max, this._it);
return this;
}
public DBCursor skip(Integer skip){
this.offset = skip;
this._it = new BoundedIterator<DBObject>(this.offset, this.max, this._it);
return this;
}
Это прекрасно работает:
DBCursor cursor = new DBCursor(it).limit(5).skip(1);
Этот код pieceof способен пропустить 1 пункт на Orignal итератора, а затем ограничить результат 5.
См:
{"_id":"51a6dc852318dcd7f1e1c09f","number":2}
{"_id":"51a6dc852318dcd7f1e1c0a0","number":3}
{"_id":"51a6dc852318dcd7f1e1c0a1","number":4}
{"_id":"51a6dc852318dcd7f1e1c0a2","number":5}
Если первый элемент был пропущен и последний элемент 5.
Теперь проблема, когда это делается:
DBCursor cursor = new DBCursor(it).skip(5).limit(1);
Это возвращает пустой результат.
Мой ожидаемый результат будет то, что он будет пропускать 5 элемент и ограничить результат 1.
Я думаю, что это проблема с тем, как BoundedIterator
сделать перескочить и ограничения на элемент:
BoundedIterator .java
public boolean hasNext() {
if (next == null) {
fetchNext();
}
return next != null;
}
public T next() {
if (!hasNext()) {
throw new NoSuchElementException();
}
return consumeNext();
}
public void remove() {
throw new UnsupportedOperationException();
}
private void fetchNext() {
for (; pos < offset && iterator.hasNext(); pos++) {
next = iterator.next();
}
if (pos < offset || !iterator.hasNext() || max >= 0 && pos - offset + 1 > max) {
next = null;
}
else {
next = iterator.next();
pos++;
}
}
private T consumeNext() {
T element = next;
next = null;
return element;
}
Что следует улучшить на этом коде. Это с кодом BoundIterator, который нужно изменить или просто в методах пропуска и ограничения моего приложения?
, что изменение вызвано юнит-тесты в мое приложение, чтобы потерпеть неудачу ... Я имею в виду, что используется для работы – xybrek