我试图解决这个问题,但是没有。

我需要实现一个类,该类实现迭代器并将迭代器作为构造函数参数,

1)需要每第二个hasnext返回

2)需要返回每个第二个下一个元素

基本上,我试图利用从构造函数接收的给定迭代器,但是当我在hasnext上使用next元素时,实际上是在将迭代器增加一个元素。所以当我独立访问hasNext或next元素并且未通过所有测试用例时,就会出现问题。任何解决方案或想法

模板和预期的实现如下所示:

public class AlternateIterator<T> implements Iterator<T>
public AlternateIterator(Iterator<T> target)

public boolean hasNext() {
        boolean returnvalue = false;
                if(iterator.hasNext()) {
                    iterator.next();
                    returnvalue = iterator.hasNext();
                }
                return returnvalue;

    }

    @Override
    public T next() {
        T object = null;
        if(iterator.hasNext()) {
        object  = iterator.next();
        return object;
        }
        else
            return null;


-通过此链接,但是当我只想使用给定的模板时,它本身会创建一个新的实现:

Can we write our own iterator in Java?

最佳答案

跟踪是否已从源迭代器中跳过元素,如下所示:

import java.util.Iterator;
import java.util.NoSuchElementException;
import java.util.Objects;

final class AlternateIterator<T>
  implements Iterator<T>
{

  static <T> Iterable<T> alternate(Iterable<T> original)
  {
    return () -> new AlternateIterator<>(original.iterator());
  }

  private final Iterator<T> source;

  private boolean skipped;

  AlternateIterator(Iterator<T> source)
  {
    this.source = Objects.requireNonNull(source);
  }

  @Override
  public boolean hasNext()
  {
    if (!skipped) {
      if (source.hasNext())
        source.next();
      skipped = true;
    }
    return source.hasNext();
  }

  @Override
  public T next()
  {
    if (hasNext()) {
      skipped = false;
      return source.next();
    }
    throw new NoSuchElementException();
  }

  @Override
  public void remove()
  {
    source.remove();
  }

}

10-07 12:52