intstream专为int类型设计,避免装箱拆箱更高效;支持range/rangeclosed、of/arrays.stream、iterate等创建方式;含filter/map/flatmap等中间操作及sum/max/reduce等终端操作;需注意类型限制、空值处理与并行安全。

Java 中用 IntStream 处理 int 类型数值流,比用 Stream<integer></integer> 更高效——避免自动装箱/拆箱,内存和性能都更优。
创建 IntStream 的常用方式
有多种直接生成 int 原生流的方法:
-
范围生成:用
IntStream.range(startInclusive, endExclusive)(不包含右边界),例如IntStream.range(1, 5)生成 1、2、3、4;rangeClosed(1, 5)则包含 5。 -
数组转换:用
IntStream.of(1, 2, 3, 4)或Arrays.stream(intArray),后者适合已有int[]数组。 -
无限流(带限制):如
IntStream.iterate(0, i -> i + 2).limit(5)生成前 5 个偶数(0、2、4、6、8)。
常用中间操作(返回新 IntStream)
这些操作不执行计算,只构建处理链:
-
filter:保留满足条件的元素,如
stream.filter(x -> x % 2 == 0)筛出偶数。 -
map:对每个元素做变换,返回
IntStream,如map(x -> x * x)计算平方。 -
flatMap:需配合
IntStream::concat或生成新IntStream,常用于“展开”区间,例如把每个数映射为range(0, x)再合并。 -
distinct / sorted / limit / skip:语义与通用 Stream 一致,但运行在原始
int上,无装箱开销。
终端操作(触发执行并产生结果)
调用后流关闭,不可复用:
-
聚合计算:如
sum()、max()、min()、average()(返回OptionalDouble)、count()。 -
归约(reduce):支持三种重载,最常用的是
reduce(int identity, IntBinaryOperator),例如reduce(1, (a, b) -> a * b)计算乘积。 -
遍历与收集:用
forEach(System.out::println);若需转回数组,调用toArray()得到int[];也可用boxed()转成Stream<integer></integer>再收集(仅在必须引用类型时才用,会引入装箱)。
注意点和典型误区
使用时需留意几个关键细节:
-
IntStream是专为int设计的,不能存long或double;其他基本类型对应LongStream、DoubleStream。 - 不要混用
mapToObj和map:前者返回Stream<r></r>,后者保持IntStream;若想转成字符串流,用mapToObj(String::valueOf)。 - 空流的
max()/min()返回OptionalInt,务必判空,否则调用getAsInt()会抛NoSuchElementException。 - 并行流(
parallel())对数值计算友好,但要注意操作是否无状态、无副作用,比如forEach并行时不保证顺序。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











