如果我有一个二维数组:
int[][] a = {
{1, 2, 3},
{4, 5, 6, 9},
{7},
};
我将如何解压:
int[] a = {1, 2, 3, 4, 5, 6, 9, 7}
我知道你可以使用 for 循环来做到这一点,但它看起来很笨重,我想知道是否有更好的方法来做到这一点:
int[] b = new int[9]
for (int i = 0; i < a.length; ++i) {
for(int j = 0; j < a[i].length; ++j) {
b.append([i][j])
}
}
答案 0 :(得分:5)
使用流很容易。
int[][] a = {
{1, 2, 3},
{4, 5, 6, 9},
{7},
};
int[] oneD = Arrays.stream(a).flatMapToInt(Arrays::stream).toArray();
System.out.println(Arrays.toString(oneD));
印刷品
[1, 2, 3, 4, 5, 6, 9, 7]
答案 1 :(得分:0)
不那么简洁,但更快速、更直接地解决您的问题:
void unpack2D(int[][] arr2d) {
int acumulator = 0;
for(int[] innerArr: arr2d){
acumulator += innerArr.length;
}
int[] b = new int[acumulator];
int pointer = 0;
for (int[] innerArr: arr2d) {
System.arraycopy(innerArr, 0, b, pointer, innerArr.length);
pointer += innerArr.length;
}
System.out.println(Arrays.toString(b));
}