使用流在Java中复制2D数组

时间:2018-01-03 09:17:44

标签: java arrays java-stream

此问题与How do I copy a 2 Dimensional array in Java?

有关

但是如何在Java 8/9中使用流复制数组?

这就是我提出的:

static int[][] cloneArray(int[][] array) {
    return IntStream.range(0, array.length).collect(
            () -> new int[array.length][],
            (ints, i) -> ints[i] = array[i].clone(),
            (ints, i) -> {});
}

使用流复制2D数组是否有更优雅或更高效的方法?

2 个答案:

答案 0 :(得分:4)

return Arrays.stream(x).map(r->Arrays.copyOf(r, r.length)).toArray(int[][]::new);

我认为这是一个改进,因为你没有分配一个nxm数组,然后用副本替换所有m长度数组。

答案 1 :(得分:2)

您可以使用

直接进行
static int[][] cloneArray(int[][] x) {
    return Arrays.stream(x).map(int[]::clone).toArray(int[][]::new);
}

请注意,这适用于ElementType方法public的任何ElementType clone(),例如

static ElementType[] cloneArray(ElementType[] x) {
    return Arrays.stream(x).map(ElementType::clone).toArray(ElementType[]::new);
}

在您的情况下,ElementType恰好是int[]