flatmaptoint用于将每个元素映射为intstream并扁平合并,适用于二维数组或list等嵌套结构,需配合arrays::stream使用,避免null子数组,jdk16+支持function参数。

flatMapToInt 用于将每个元素映射为一个 IntStream,再把所有流扁平合并成单个 IntStream,特别适合处理“集合中含数组/数字序列”的嵌套结构。
核心用法:把二维数组或 List 转成单一 IntStream
它接收一个 ToIntFunction<t></t> 函数,该函数对每个输入元素返回一个 IntStream。常见场景是把 int[] 转为 IntStream,再自动拼接。
- 对
int[][]:用Arrays::stream把每行转成IntStream - 对
List<int></int>:同样用Arrays::stream处理每个子数组 - 不能直接传
int[]给 flatMapToInt —— 它操作的是流的每个元素,不是整个数组
典型示例:二维数组转 IntStream
比如有 int[][] data = {{1, 2}, {3, 4, 5}, {6}};:
IntStream stream = Arrays.stream(data)
.flatMapToInt(Arrays::stream); // 每个 int[] → IntStream,再扁平
// 结果:1, 2, 3, 4, 5, 6
注意:Arrays.stream(data) 返回的是 Stream<int></int>,不是 Stream<integer></integer>;Arrays::stream 在这里作为 ToIntFunction<int></int>,正好适配 flatMapToInt。
常见错误与避坑点
- 误用
mapToInt:它只适用于单个数字,无法展开数组 - 混淆
flatMap和flatMapToInt:前者返回Stream<t></t>,后者专为int优化,避免装箱开销 - 传入 null 子数组:会抛
NullPointerException,建议提前过滤或判空 - 想处理
Integer[]或List<list>></list>?得先转成int[]或用flatMap+mapToInt配合
扩展:处理 List>
若数据是 List<list>></list>,需先转为 int[] 或逐层展开:
List<list>> nested = Arrays.asList(
Arrays.asList(1, 2),
Arrays.asList(3, 4, 5)
);
IntStream stream = nested.stream()
.flatMap(list -> list.stream().mapToInt(Integer::intValue));
// 或更简洁:.flatMapToInt(list -> list.stream().mapToInt(Integer::intValue))
</list>
注意:JDK 16+ 支持 flatMapToInt 直接接 Function<t intstream></t>,所以上面写法在新版中合法且高效。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











