java8streamtoArray问题-为什么我不需要在这里为int[][]::new指定数组大小?
使用下面的代码,我可以复制二维数组,但是为什么我不需要在这里为 int[][]::new 指定数组大小?
int[][]source= {{0, 1, 0}, {0, 0, 1}, {1, 1, 1}, {0, 0, 0},{0, 0, 0}};
int[][] destination=Arrays.stream(source)
.map(a -> Arrays.copyOf(a, a.length))
.toArray(int[][]::new);
回答
因为你提供的不是数组,而是对构造数组的方法的引用。该toArray
实施将提供大小来调用构造函数。
- @stewchicken: no, because the inner arrays will already be created by then. Think of the the `int[][]` created using this parameter as just a 1-dimensional array where the element type happens to be another 1-dimensional array `int[]`. Basically that line will effectively do the equivalent of `new int[someSize][]`.
THE END
二维码