繁体   English   中英

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

[英]Copy 2D array in Java using streams

这个问题与我如何在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数组的更优雅或更有效的方法?

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

我认为这是一种改进,因为您没有分配nxm数组,而是将所有m个长度的数组替换为一个副本。

您可以使用以下方法直接进行

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM