数值计算应优先使用intstream、longstream或doublestream等原始类型流,避免stream、stream等包装类型流;从list、int[]等数据源直接转为对应原始流,聚合操作使用sum()、average()等原生方法,可显著降低内存占用与耗时。

核心就一条:数值计算别用 Stream<integer></integer>、Stream<long></long> 这类包装类型流,直接切到 IntStream、LongStream 或 DoubleStream。
从源头切换到原始类型流
只要数据源是 List<integer></integer>、int[] 或 long[],第一时间转成对应原始流:
-
list.stream().mapToInt(Integer::intValue)—— 适用于List<integer></integer> -
Arrays.stream(intArray)—— 直接从int[]创建IntStream -
LongStream.range(1, 1000000)—— 生成长整型序列,不创建任何对象 - 避免
list.stream().mapToLong(Long::longValue).boxed()这种来回转换,有装箱就等于白优化
聚合操作必须用原生方法
原始流的 sum()、average()、max()、min() 都是直接在栈上运算,不产生中间对象:
- ✅ 正确:
int sum = list.stream().mapToInt(Integer::intValue).sum(); - ❌ 错误:
int sum = list.stream().reduce(0, Integer::sum);—— 每次调用都触发拆箱+装箱 - ⚠️ 警惕混用:
mapToInt(...).mapToObj(i -> i + "")会重新装箱,应改用mapToObj(String::valueOf)
内存和性能收益很实在
以百万级整数求和为例:
-
Stream<integer></integer>:每个Integer占约 16 字节(含对象头、对齐填充),堆内存压力大,易触发 Minor GC -
IntStream:每个值仅占 4 字节,连续存储,CPU 缓存友好,JVM 可做深度内联与向量化优化 - 实测常见场景下,耗时降低 3–5 倍,GC 暂停减少 70% 以上
什么情况可以不切?
不是所有地方都要强求原始流:
- 集合极小(比如几十个元素),装箱开销可忽略
- 逻辑中必须保留对象语义(如需调用
Integer.toString()或参与泛型容器交互) - 已用
boxed()转回对象流,且后续操作无法再用原始流承接
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











