Детали могут зависеть от того, известен ли массив как прямоугольный или нет.Но независимо от этого, я бы рекомендовал просто включить это в служебный метод, который реализован в общем виде и работает для всех видов входных массивов.
Пример показан ниже.Метод flatten
- это то, что вы ищете.
flattenWithStreams
- это просто пример, показывающий, что это можно кратко решить с помощью потоков.Я не делал подробного анализа производительности, но подход, использующий arraycopy
, кажется более быстрым.
import java.util.Arrays;
import java.util.stream.IntStream;
import java.util.stream.Stream;
public class FlattenArrays
{
public static void main(String[] args)
{
test();
}
private static void test()
{
int[][] source = new int[3][];
source[0] = new int[] { 0, 1, 2 };
source[1] = new int[] { 3, 4, 5, 6 };
source[2] = new int[] { 7, 8, 9 };
int destinationA[] = flatten(source);
System.out.println(Arrays.toString(destinationA));
int destinationB[] = flattenWithStream(source);
System.out.println(Arrays.toString(destinationB));
}
private static int[] flatten(int array[][])
{
int length = 0;
for (int a[] : array)
{
length += a.length;
}
int destination[] = new int[length];
int offset = 0;
for (int a[] : array)
{
System.arraycopy(a, 0, destination, offset, a.length);
offset += a.length;
}
return destination;
}
private static int[] flattenWithStream(int array[][])
{
return Stream.of(array).flatMapToInt(a -> IntStream.of(a)).toArray();
}
}