在Java 8中,您可以使用IntStream
来生成相应的索引,然后将其提供给Arrays.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);
}
请注意,如果
pageSize
不能完美地划分输入的大小,则剩余的元素将添加到最后一个int数组中。
例如:
partitionIntoArray(new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}, 4);
输出:
[[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