我试图解决这个问题,但是没有。
我需要实现一个类,该类实现迭代器并将迭代器作为构造函数参数,
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();
}
}