You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Iterator遍历列表交替元素(不修改while循环)

实现交替遍历的解决方案

当然可以!不用动你现有的while循环半行代码,只需要给原迭代器加个“包装器”,让它自动跳过不需要的元素就行。

核心思路是自定义一个迭代器,把原来的迭代器包在里面,重写next()方法——每次调用时,先返回当前元素,再自动跳过下一个元素(如果有的话)。这样你的while循环还是调用hasNext()和next(),但拿到的就是交替的元素了。

具体代码实现

先写这个自定义的包装迭代器:

import java.util.Iterator;

class SkipIterator<T> implements Iterator<T> {
    private final Iterator<T> originalIterator;

    public SkipIterator(Iterator<T> iterator) {
        this.originalIterator = iterator;
    }

    @Override
    public boolean hasNext() {
        return originalIterator.hasNext();
    }

    @Override
    public T next() {
        // 先获取当前要返回的元素
        T current = originalIterator.next();
        // 如果还有下一个元素,就跳过它
        if (originalIterator.hasNext()) {
            originalIterator.next();
        }
        return current;
    }
}

然后修改你原来代码里获取迭代器的那一行,其他代码完全不动:

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6);
// 替换原迭代器为我们的包装迭代器
Iterator<Integer> it = new SkipIterator<>(list.iterator());
while (it.hasNext()) {
    System.out.println(it.next());
}

效果说明

运行这段代码,输出就是1、3、5,完全符合你的要求。而且不管列表长度是奇数还是偶数,都能正常工作:如果列表是[1,2,3,4,5],最后会输出1、3、5;如果是[1,2,3],输出1、3。

这种方法的好处就是完全遵循了你的要求——原while循环一行都不用改,所有逻辑都封装在自定义迭代器里,符合开闭原则。

内容的提问来源于stack exchange,提问作者Randhir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:35:54