Iterable - 移动到指定位置

时间:2017-05-15 13:47:26

标签: java iterator

  • 我需要一个可迭代的数据结构,提供了可能性 标准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();
  }
}

你觉得使用这种方法有什么缺点吗?

3 个答案:

答案 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);