IntStream 是 Java 8 专为 int 设计的原始流,避免装箱拆箱、提升性能与内存效率;支持 range 创建、内置聚合方法、短路操作,并行需谨慎使用。

IntStream 是 Java 8 引入的原始类型流,专为 int 类型设计,它绕过对象封装,直接在栈上操作基本值,因此在数值密集型任务中比 Stream<integer></integer> 更快、更省内存。
避免装箱拆箱,从源头提效
普通 Stream<integer></integer> 每次遍历都要把 int 装箱成 Integer 对象,再拆箱取值,频繁触发 GC。IntStream 完全跳过这一步。
- 用
Arrays.stream(ints)直接从int[]创建流,别写Arrays.asList(ints).stream().mapToInt(...) - 生成范围数据时,优先选
IntStream.range(1, n)或IntStream.rangeClosed(1, n),而非Stream.iterate(...).mapToInt(...) - 对一百万个整数求和:IntStream 实现通常比包装类流快 2–3 倍
搭配聚合方法,写出简洁又安全的计算
IntStream 内置了针对 int 的终端操作,无需手动 reduce,语义清晰且不易出错。
-
.sum()、.max()、.min()、.average()都返回对应包装类型(如OptionalInt),强制你处理空流场景 - 提取字符串列表最大值时:
list.stream().mapToInt(Integer::parseInt).max().orElse(-1)—— 一行完成转换+找最大+兜底 - 统计满足条件的个数,用
.filter(...).count(),比.reduce(0, (a, b) -> a + 1, Integer::sum)更直观
结合短路与过滤,控制实际计算量
IntStream 支持 anyMatch、findFirst、limit 等短路操作,配合 filter 可大幅减少执行路径。
立即学习“Java免费学习笔记(深入)”;
- 判断是否存在大于 100 的数:
ints.intStream().anyMatch(x -> x > 100),找到第一个就停,不扫全量 - 取前 N 个偶数:
IntStream.range(1, 1000).filter(x -> x % 2 == 0).limit(N),先筛再截,不生成多余元素 - 注意:
sorted()是有状态操作,放limit前会失去短路优势;推荐顺序是filter → limit → sorted
慎用并行,小数据别硬上 parallel
IntStream 支持 parallel(),但不是“开就变快”。只有在数据量大(通常 ≥ 10⁵)、纯 CPU 计算、无共享状态时才值得启用。
- 适合:大规模数组归约、批量数值映射
- 不适合:小数组求和、含日志打印或外部调用的操作
- 替代方案:对简单聚合(如求和、计数),
Collectors.summingInt在并行环境下比手写reduce更安全高效


















