Cómo aplanar matriz 2D a matriz 1D?

¿Cómo puedo aplanar la matriz de 2 dimensiones int originalArray[][] a una matriz de 1 dimensión?

  int a [] = {1,2,6,7,2}; int b [] = {2,44,55,2}; int c [] = {2,44,511,33}; int originalArray [][] = new int[][]{a,b,c}; 

Un bucle simple para hacer funcionará, no es difícil, pero dependerá del orden que desee para copiar los valores. Por ejemplo (basado en el hecho de que en su ejemplo todas las matrices tienen la misma longitud):

 int[] newArray = new int[3 * a.length]; int index = 0; for (int n = 0; n < a.length; n++) { newArray[index++] = a[n]; newArray[index++] = b[n]; newArray[index++] = c[n]; } 

o (orden diferente, a, b, c puede ser de diferentes longitudes):

 int[] newArray = new int[a.length + b.length + c.length]; System.arrayCopy(a, 0, newArray, 0, a.length); System.arrayCopy(b, 0, newArray, a.length, b.length); System.arrayCopy(c, 0, newArray, a.length + b.length, c.length); 

Con Guava , puedes usar cualquiera

int[] all = Ints.concat(originalArray);

o

int[] all = Ints.concat(a, b, c);

Con Java 8 puede “flatMap” las matrices internas:

 int[] flatArray = Arrays.stream(originalArray) .flatMapToInt(Arrays::stream) .toArray(); 

o:

 int[] flatArray = Stream.of(a, b, c) .flatMapToInt(Arrays::stream) .toArray(); 

Habrá 2 pasos:

1) descubre el número total de elementos para crear un nuevo vector (matriz 1d)

2) itere a través de su matriz 2d en orden predefinido y copie sus elementos al vector creado

 int elementsNumber = 0; for (int i = 0; i < originalArray.length; i++) { elementsNumber += originalArray[i].length; } int[] newArray = new int[elementsNumber]; int j = 0; for (int i = 0; i < originalArray.length; i++) { System.arrayCopy (originalArray[i], 0, newArray, j, originalArray[i].length); j += originalArray[i].length; } 

Como las matrices no se pueden extender (es decir, debe declarar el tamaño de un error al inicializarse), debe recorrer las matrices dos veces:

 int size = 0; for (int[] ar : originalArray) size += ar.length; int[] result = new int[size]; int pos = 0; for (int[] ar : originalArray) { System.arraycopy(ar, 0, result, pos, ar.length); pos += ar.length; } 
 int[] oneDArray = new int[arr.length*arr.length]; //Flatten 2D array to 1D array... int s = 0; for(int i = 0; i < arr.length; i ++) for(int j = 0; j < arr.length; j ++){ oneDArray[s] = arr[i][j]; s++; } 

Cuenta el número total de elementos en Array original. Crea una nueva matriz de esa longitud. Copie los elementos uno por uno en la nueva matriz.

No estoy familiarizado con ninguna función de la biblioteca para hacerlo.