flatmaptoint用于将stream映射为intstream并合并,适用于含int[]的集合扁平化;输入为stream,输出为intstream,需配合arrays::stream使用,避免装箱开销及类型不匹配错误。

flatMapToInt 用于将 Stream 中的每个元素映射为一个 IntStream,再把所有整数流“打散”合并成一个单一的 IntStream,特别适合处理含 int[] 的集合扁平化。
什么时候用 flatMapToInt
当你有一个包含基本类型数组(如 int[])的集合,想把所有数组里的整数统一拉平成一个整数流时,flatMapToInt 是最直接、高效的选择。它避免了装箱开销,比 flatMap + Arrays.stream(...).boxed() 更轻量。
- 输入是
Stream<int></int>,输出是IntStream - 不能传入返回
Stream<integer></integer>或其他引用类型流的函数 - 底层调用的是
IntFunction<intstream></intstream>,即接收一个元素,返回一个IntStream
基础用法:把 int[][] 扁平成单个 IntStream
例如,有一组二维数组,想统计全部数字之和或找出最大值:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
int[][] data = {{1, 2}, {3, 4, 5}, {6}};
int sum = Arrays.stream(data)
.flatMapToInt(Arrays::stream) // 每个 int[] → IntStream,再合并
.sum(); // 结果:21
注意:Arrays::stream 在作用于 int[] 时,返回的就是 IntStream,正好匹配 flatMapToInt 的参数要求。
处理 List 或自定义对象中的 int[]
如果数据存在 List<int></int> 或封装在对象里,写法类似:
-
List<int> lists = Arrays.asList(new int[]{10, 20}, new int[]{30});</int>lists.stream().flatMapToInt(Arrays::stream).average().orElse(0.0) - 若对象字段是
int[] nums:stream.map(MyObj::getNumbers).flatMapToInt(Arrays::stream)
常见错误与避坑点
容易出错的地方集中在类型不匹配:
- 误用
flatMap:比如写flatMap(arr -> Arrays.stream(arr))—— 这返回的是Stream<integer></integer>(因为Arrays.stream(int[])返回IntStream,但flatMap期望Stream>),编译不通过 - 混用泛型数组:对
Integer[]不能直接用Arrays::stream配flatMapToInt,得先转成int[]或改用flatMap+mapToInt(Integer::intValue) - 空数组安全:
int[]为null会抛NullPointerException,建议提前过滤或判空
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










