Arrays.stream()配合flatMap展平多维数组需区分基本型与引用型:int[][]用flatMapToInt,String[][]等用flatMap;须filter非空防NPE;三维数组需嵌套两次flatMap;收尾注意类型转换如toArray()或boxed()。

用 Arrays.stream() 配合 flatMap 展平多维数组,关键不是“拼接”,而是逐层解包、类型对齐、安全兜底——尤其要注意基本类型和引用类型的处理差异。
区分二维数组类型:基本型 vs 引用型
二维数组分两类,处理方式不同:
-
基本类型二维数组(如 int[][]):不能直接用
Arrays.stream(arr).flatMap(...),因为Arrays.stream(int[][])返回的是IntStream的包装流(Stream<int></int>),需用flatMapToInt才能对接Arrays::stream -
引用类型二维数组(如 String[][]):
Arrays.stream(arr)返回Stream<string></string>,可直接flatMap(Arrays::stream)
基础展平写法(带类型适配)
常见场景的正确写法:
- 整型二维数组 →
IntStream:
int[][] data = {{1,2}, {3,4,5}};<br> IntStream flatInts = Arrays.stream(data).flatMapToInt(Arrays::stream); - 字符串二维数组 →
Stream<String>:
String[][] words = {{"a","b"}, {"c"}};<br> Stream<String> flatWords = Arrays.stream(words).flatMap(Arrays::stream); - 对象数组(如
Integer[][])→Stream<Integer>:
Integer[][] nums = {{1,2}, {3}};<br> Stream<Integer> flatNums = Arrays.stream(nums).flatMap(Arrays::stream);
空行与 null 元素防护
生产环境常遇到 null 行或空数组,直接调用 Arrays::stream 会抛 NullPointerException 或返回空流但不报错。稳妥做法是提前过滤:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
立即学习“Java免费学习笔记(深入)”;
- 跳过
null行:.filter(Objects::nonNull) - 跳过空数组:
.filter(arr -> arr.length > 0) - 组合使用(推荐):
Arrays.stream(data)<br> .filter(Objects::nonNull)<br> .filter(arr -> arr.length > 0)<br> .flatMapToInt(Arrays::stream);
链式 flatMap 处理更深嵌套(如三维数组)
flatMap 每次只降一层。面对 int[][][],需两次 flatMap:
- 三维整型数组展平:
int[][][] cube = {{{1},{2}}, {{3,4}}, {{5}}};<br> IntStream flat3D = Arrays.stream(cube)<br> .filter(Objects::nonNull)<br> .flatMapToInt(arr2D -> Arrays.stream(arr2D)<br> .filter(Objects::nonNull)<br> .flatMapToInt(Arrays::stream)); - 注意:第二层仍要用
flatMapToInt,因内层仍是int[]
转成集合或数组的收尾建议
展平后通常要落地,注意类型匹配:
-
IntStream→int[]:.toArray() -
IntStream→List<Integer>:.boxed().collect(Collectors.toList()) -
Stream<String>→String[]:.toArray(String[]::new) - 避免常见错误:对
IntStream调用.collect(Collectors.toList())会编译失败,必须先boxed()

















