我需要一个可迭代的数据结构,提供了可能性
标准Iterator<>
界面(next()
,hasNext()
等)。
此外,应该可以在a处重新定位迭代器 某个职位。
是否有任何课程已经提供了上述可能性?
否则我会实现以下内容:
public class PositionableIterator<E> implements Iterator<E> {
private final List<E> delegate;
private Iterator<E> iterator;
public PositionableIterator(List<E> delegate) {
this.delegate = delegate;
this.iterator = delegate.iterator();
}
public void moveTo(int index) {
this.iterator = delegate.listIterator(index);
}
public void moveTo(E element) {
this.iterator = delegate.listIterator(delegate.indexOf(element));
}
@Override
public boolean hasNext() {
return iterator.hasNext();
}
@Override
public E next() {
return iterator.next();
}
}
你觉得使用这种方法有什么缺点吗?
答案 0 :(得分:0)
我建议只需将迭代器转换为list并使用其功能。因为这样,它更容易理解和维护。有转换Convert Iterator to ArrayList
的示例答案 1 :(得分:0)
您可以通过执行以下操作来实现相同目的:
Iterator<String> iterator = input.iterator();
for (; index > 0; --index) {
iterator.next(); // move the iterator to index
}
答案 2 :(得分:0)
您还可以使用Google guavas Iterables方法从Iterable中的特定位置获取项目。
Iterator<Something> iterator = repo.GetMyIterator();
Something atPos5 = Iterables.get(iterator, 5);