如何在Java中将数组转换为表?

如何在Java中将数组转换为表?,java,arrays,collections,Java,Arrays,Collections,假设我有一个数组 [1,2,3,4,5,6,7,8,9,10,11,12] 是否有任何标准方法将其转换为具有N列的表 例如,如果N=3: [[1,2,3],[4,5,6],[7,8,9],[10,11,12]] 或者如果N=4: [[1,2,3,4],[5,6,7,8],[9,10,11,12]] 等等。我们可以这样做: int n = 5; // what ever size you want to break it with int[] bytes = {1,2,3,4,5,6,7,

假设我有一个数组

[1,2,3,4,5,6,7,8,9,10,11,12]
是否有任何标准方法将其转换为具有
N
列的表

例如,如果
N=3

[[1,2,3],[4,5,6],[7,8,9],[10,11,12]]
或者如果
N=4

[[1,2,3,4],[5,6,7,8],[9,10,11,12]]

等等。

我们可以这样做:

int n = 5;  // what ever size you want to break it with
int[] bytes = {1,2,3,4,5,6,7,8,9,10,11,12};
int length = bytes.length;
int counter = 0;
int newSize = length % n == 0 ? length/n : (length/n)+1;
int[][] newArray = new int[newSize][n];
for (int i = 0; i < length - n + 1; i += n)
    newArray[counter++] = Arrays.copyOfRange(bytes, i, i + n);

if (length % n != 0)
    newArray[counter] = Arrays.copyOfRange(bytes, length - length % n, length);
int n=5;//你想用多大的尺码来打破它
int[]字节={1,2,3,4,5,6,7,8,9,10,11,12};
int length=bytes.length;
int计数器=0;
int newSize=长度%n==0?长度/n:(长度/n)+1;
int[]newArray=newint[newSize][n];
对于(int i=0;i
仅用于循环:

    int[] array = {1,2,3,4,5,6,7,8,9,10,11,12};
    int n = 3;
    int m = (int) Math.ceil( ( (double) array.length ) / n );
    int[][] table = new int[m][n];
    int k = 0;
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            if (k < array.length) {
                table[i][j] = array[k];
                k++;
            }
        }
    }
int[]数组={1,2,3,4,5,6,7,8,9,10,11,12};
int n=3;
int m=(int)Math.ceil(((double)array.length)/n;
int[][]表=新的int[m][n];
int k=0;
for(int i=0;i

输出应该是您所要求的。

不是真的,但是您可以使用一些数学和循环轻松创建一个输出:

public int[][] getTable(int[] arr, int n) {
    int[][] table = new int[(int)Math.ceil(arr.length / (float)n)][n];
    for (int i = 0, row = 0, column = 0; i < arr.length; i++) {
        if (i % n == 0 && i != 0) {
            row++;
            column = 0;
        }
        table[row][column++] = arr[i];
    }
    return table;
}
公共int[]getTable(int[]arr,int n){ int[]table=newint[(int)Math.ceil(arr.length/(float)n)][n]; for(int i=0,行=0,列=0;i
使用Java 8,您可以使用
IntStream
生成相应的索引,这些索引将提供给
数组.copyOfRange

我回答了一个类似的问题,您可以找到逻辑,但这里稍微修改了一下,将数组作为参数:

static List<int[]> partitionIntoList(int[] arr, int pageSize) {
    return IntStream.range(0, (arr.length + pageSize - 1) / pageSize)
        .mapToObj(i -> Arrays.copyOfRange(arr, i * pageSize, min(pageSize * (i + 1), arr.length)))
        .collect(toList());
}

static int[][] partitionIntoArray(int[] arr, int pageSize) {
    return IntStream.range(0, (arr.length + pageSize - 1) / pageSize)
        .mapToObj(i -> Arrays.copyOfRange(arr, i * pageSize, min(pageSize * (i + 1), arr.length)))
        .toArray(int[][]::new);
}
产出:

[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
如果页面大小为5,最后两个元素将添加到第三个数组中:

[[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12]]

希望有帮助!:)

如果在你的例子中,
N=5
,我的回答正确吗?
[[1,2,3,4,5],[6,7,8,9,10],[11,12]
我认为这并没有足够的通用性,所以会有库,但它应该非常简单?@DoubleDouble在我的例子中,它总是一个表,但如果不是,可能为原语填充0,为要填充的对象填充null:[[1,2,3,4,5],[6,7,8,9,10],[11,12,0,0,0]]我不知道我是否喜欢Java8:-)
[[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12]]