0
我在此应用程序中使用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代码能够跳过的一部开拓创新的Iterator 1项,然后限制结果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