这个问题与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数组?
你可以直接使用它
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[]
。
return Arrays.stream(x).map(r->Arrays.copyOf(r, r.length)).toArray(int[][]::new);
我认为这是一个改进,因为你没有分配一个nxm数组,然后用副本替换所有m长度数组。