如何将2D阵列展平为1D阵列?

Jes*_*ssy 21 java arrays

如何将2维数组展平int originalArray[][]为1维数组?

    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};
Run Code Online (Sandbox Code Playgroud)

Kev*_*ion 41

使用番石榴,您可以使用其中任何一种

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

要么

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

  • 贬低为什么?谁想在他们需要的时候写上面的所有代码呢? (13认同)
  • `ObjectArrays.concat` (3认同)

ass*_*ias 29

使用Java 8,您可以"flatMap"内部数组:

int[] flatArray = Arrays.stream(originalArray)
        .flatMapToInt(Arrays::stream)
        .toArray();
Run Code Online (Sandbox Code Playgroud)

要么:

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


rsp*_*rsp 7

一个简单的for循环可以做,这并不困难,但取决于你要复制值的顺序.例如(基于在您的示例中数组都具有相同长度的事实):

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];
}
Run Code Online (Sandbox Code Playgroud)

或(不同的顺序,a,b,c可以有不同的长度):

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);
Run Code Online (Sandbox Code Playgroud)