Java使用IntStream翻转二维数组形式图片的代码运行原理是什么
代码功能说明
这段代码的作用是垂直翻转以二维int数组存储的图像,本质是将输入二维数组的行顺序完全倒置,和手写for循环实现的行倒序效果完全一致。
前置说明
你没接触过Java Streams也没关系,你可以把Stream理解为Java提供的一套免手写循环的流式处理工具,按照「生成序列->转换元素->收集结果」的流水线逻辑运行,这段代码里用到的IntStream就是专门用来处理int类型序列的Stream实现。
逐行执行逻辑拆解
我们逐段拆这段Stream链式调用:
IntStream.range(0, image.length):生成左闭右开的连续int序列,取值范围是0到image.length - 1,正好覆盖输入二维数组所有行的下标。比如输入的image有3行,就会生成0、1、2三个整数。.mapToObj(i -> image[image.length - 1 - i]):对流里的每个下标i做转换:
计算倒序后的行下标image.length - 1 - i,直接取出原数组对应下标的整行数据。比如总共有3行时,i=0就取第2行,i=1取第1行,i=2取第0行,这一步执行完后,流里的元素就是已经倒序排列的所有行数组。.toArray(int[][]::new):把流里已经倒序的所有行数据,收集为一个新的二维int数组返回,其中int[][]::new是Java的方法引用语法,用来告诉toArray方法需要生成int类型的二维数组来存储结果。
实际运行示例
假设输入的image为:
int[][] image = { {1,2,3}, {4,5,6}, {7,8,9} };
执行后返回的结果为:
{ {7,8,9}, {4,5,6}, {1,2,3} }
等价于以下手写for循环的实现:
public int[][] flipImage(int[][] image) { int[][] result = new int[image.length][]; for (int i = 0; i < image.length; i++) { result[i] = image[image.length - 1 - i]; } return result; }
内容的提问来源于stack exchange,提问作者pianoman102
相关产品推荐
相关产品推荐

