#java #java-stream
#java #java-stream
Вопрос:
Используя приведенный ниже код, я мог бы скопировать 2-мерный массив, но почему мне не нужно указывать размер массива здесь для 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);
Комментарии:
1. когда вы возвращаете массив из функции, вам также не нужно указывать размер
Ответ №1:
Потому что то, что вы предоставляете, — это не массив, а ссылка на метод построения массива. toArray
Реализация предоставит размер для вызова конструктора.
Комментарии:
1. Реализация toArray предоставит только одно значение параметра, но здесь вам нужно два значения для 2-мерного массива.
2. @stewchicken: нет, потому что к тому времени внутренние массивы уже будут созданы. Подумайте о
int[][]
созданном с использованием этого параметра просто 1-мерном массиве, где тип элемента оказывается другим 1-мерным массивомint[]
. По сути, эта строка будет эффективно выполнять эквивалентnew int[someSize][]
.3. Ареус и Иоахим, спасибо за ваше краткое объяснение!