gpt4 book ai didi

java - 如何在java中迭代每个第二个元素

转载 作者:行者123 更新时间:2023-12-01 09:41:40 25 4
gpt4 key购买 nike

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

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

1)需要每隔2个next返回

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

基本上,我试图利用从构造函数接收到的给定迭代器,但是当我在 hasext 上使用下一个元素时,我实际上是在将迭代器增加一个元素。所以当我独立访问 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();
}

}

关于java - 如何在java中迭代每个第二个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38402477/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com