Если все массивы имеют одинаковую длину, вы можете использовать это:
List<Integer[]> arrays = Arrays.asList(arr1, arr2, arr3);
IntStream.range(0, arr1.length)
.mapToObj(i -> arrays.stream().map(a -> a[i]).collect(Collectors.toList()))
.forEach(System.out::println);
Это создает список, содержащий все массивы. После этого он создает поток, повторяющийся по всем массивам, и собирает новые массивы.
Будет напечатан следующий результат:
[1, 4, 7]
[2, 5, 8]
[3, 6, 9]
Если у вас есть массивы различной длины, вы можете использовать что-то вроде этого:
Integer[] arr1 = new Integer[]{1, 2, 3};
Integer[] arr2 = new Integer[]{4, 5};
Integer[] arr3 = new Integer[]{7};
List<Integer[]> arrays = Arrays.asList(arr1, arr2, arr3);
IntStream.range(0, arrays.stream().mapToInt(a -> a.length).max().orElseThrow())
.mapToObj(i -> arrays.stream().map(a -> i < a.length ? a[i] : null).collect(Collectors.toList()))
.forEach(System.out::println);
Здесь используется длина самого большого массива и проверяется i
перед сбором полученных массивов.
Результат будет таким:
[1, 4, 7]
[2, 5, null]
[3, null, null]