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

Java中如何将Iterator<Integer>转换为PrimitiveIterator.OfInt

Iterator 转换为 PrimitiveIterator.OfInt 实现方案

以下两种实现均适用于Java 8及以上版本:

方案1:手动实现适配器(性能最优)

直接实现PrimitiveIterator.OfInt核心接口方法,逻辑透明无额外开销:

import java.util.Iterator;
import java.util.Objects;
import java.util.PrimitiveIterator;
import java.util.function.IntConsumer;

public static PrimitiveIterator.OfInt convertToOfInt(Iterator<Integer> iterator) {
    Objects.requireNonNull(iterator);
    return new PrimitiveIterator.OfInt() {
        @Override
        public boolean hasNext() {
            return iterator.hasNext();
        }

        @Override
        public int nextInt() {
            // 自动拆箱,若原迭代器返回null会抛出NullPointerException,符合原始类型语义
            return iterator.next();
        }

        @Override
        public void forEachRemaining(IntConsumer action) {
            Objects.requireNonNull(action);
            iterator.forEachRemaining(i -> action.accept(i));
        }
    };
}

方案2:基于Stream API简化实现

代码更简洁,适合日常业务场景使用:

import java.util.Iterator;
import java.util.PrimitiveIterator;
import java.util.Spliterators;
import java.util.stream.StreamSupport;

public static PrimitiveIterator.OfInt convertToOfInt(Iterator<Integer> iterator) {
    return StreamSupport.stream(Spliterators.spliteratorUnknownSize(iterator, 0), false)
            // 可按需添加 .filter(Objects::nonNull) 过滤null元素避免拆箱异常
            .mapToInt(Integer::intValue)
            .iterator();
}

注意事项

  • 两种方案均为视图转换,不会预加载所有元素,内存开销极低,原迭代器的状态变更会同步到转换后的迭代器
  • 若原Iterator存在null元素,拆箱时会抛出NullPointerException,可根据业务需要提前过滤null,或在nextInt方法中添加默认值处理逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 21:06:04