Java list to array: преобразуем список элементов в массив
Привет! В данной статье мы рассмотрим, как в Java преобразовать список элементов в массив элементов. Собственно, способов сделать это не так уж и много, и все они простые, так что статья будет несложной. Сразу же определимся, с чем мы работаем. Будем конвертировать списки в массивы, а конкретнее — список строк: I, love, learning, on, JavaRush будем преобразовывать в массив таких же строк. Но для начала маленький бонус. Расскажем о том, как по быстрому запилить списочек.
Как по быстрому запилить списочек list to array
Способ №1. Перебор
Способ №2. Метод toArray
1. Длина передаваемого массива меньше, чем длина списка
В этом случае метод создает новый массив и помещает в него элементы списка. Мы продемонстрировали это в примере выше.
2. Длина передаваемого элемента равна длине списка
Метод поместит элементы списка в переданный массив. Продемонстрируем это: При выводе мы увидим все те же строки, и станет ясно, что метод заполнил созданный нами массив.
3. Длина передаваемого массива больше, чем длина списка
Метод запишет все элементы списка в массив, а в следующую за последним добавленным элементом ячейку запишет значение null . Продемонстрируем это: После запуска метода main в консоли увидим следующее: Какой же метод из трех выбрать? В ранних версиях Java было оптимально передавать массив с длиной равной длине списка или больше нее. Однако в современных JVM есть оптимизации, и в некоторых случаях они обеспечивают более быструю работу метода, в который передается массив меньшей длины, чем длина списка. Так что если вы работаете на современной версии Java, передавайте в метод пустой массив, как мы делали в первом примере:
Примеры преобразования списка в массив на Java
Хотя список является более мощным, чем массив в Java, в некоторых случаях мы хотим преобразовать первое в структуру данных последнего. Например, если есть существующий API, где ожидаемым параметром является массив, а у вас есть список.

Если вы оказались в таких ситуациях, вот несколько способов, которые могут помочь преобразовать список в массив на Java.
Преобразовать список в массив с помощью toArray()
Самый простой способ преобразовать список в массив – это использовать встроенный метод toList(). Вот код:
Этот метод не имеет аргумента и возвращает Object Array. Он создаёт новый массив, содержащий все элементы списка. Пример:
Как показано, toArray() возвращает массив объектов. myArray будет иметь 3 элемента – это то же самое, что и исходный список. Следовательно, ниже ожидаемый результат:
Apple
Banana
Orange
Обратите внимание, что тип возвращаемого значения – строго объектный массив. Если мы попытаемся привести результат к другому типу массива (например, массив строк), будет сгенерировано исключение.
И ниже результат, когда код выше выполняется. ClassCastException выдает во время выполнения.
Exception in thread «main» java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;
at Test.main(Test.java:10)
toArray() должен возвращать «безопасный» массив – это означает, что List не будет ссылаться на элементы возвращаемого массива. Другими словами, если вы измените массив, список не будет затронут. Рассмотрим пример ниже:
Изменение в результате (myArray) не повлияет на исходный список (myList). Следовательно, выходные данные кода будут отображать исходное содержимое списка, как показано ниже:
Apple
Banana
Orange
Конвертировать список в массив с помощью toArray (T [] a)
Если мы хотим, чтобы результат toArray возвращал определенный тип массива (например, массив строк), мы можем передать, какой тип он должен вернуть. Вот синтаксис:
T[] toArray(T[] a)
JavaDoc говорит, что параметр – это «массив, в котором должны храниться элементы этого списка, если он достаточно большой; в противном случае для этой цели выделяется новый массив того же типа».
Код передает массив String длиной 0. Поскольку элементы не помещаются, создается новый массив Array и возвращается вызывающей стороне.
В качестве альтернативы, мы можем передать массив, достаточно большой, чтобы содержать элементы списка. Вот пример:
Нам даже не нужно присваивать возврат метода toArray переменной. Содержимое хранится в параметре. myArray в этом случае получит значения List. И если мы запустим его, будет отображено следующее:
Apple
Banana
Orange
Подводный камень, который следует учитывать, заключается в том, что мы не можем автоматически преобразовать список определенного типа в массив другого типа с помощью метода toArray. Вот пример кода:
Приведенный выше код создаст исключение ArrayStoreException. Потому что он не может преобразовать список строк в массив целых чисел.
Используем пользовательский код
Можно использовать нашу собственную логику. Этот способ имеет некоторые преимущества. Вот простой пользовательский код для преобразования списка строк в массив строк Java.
В итоге, получаем результат:
Apple
Banana
Orange
Одним из преимуществ использования пользовательского кода является то, что у нас может быть дополнительная логика, не включенная в готовые вспомогательные классы.
Например, если мы хотим преобразовать исходные элементы списка в элементы конечного массива. Вот простой пример:
Как показано, оригинальный список содержит названия фруктов. Результат содержит фразы, которые используют фрукты. Вывод:
This is Apple
This is Banana
This is Orange
Переделать список строк в целочисленный массив
Вот еще один пример пользовательского кода, в котором мы переделаем список строк в массив целых чисел.
Результат показан ниже:
100
200
300
В двойной массив
Аналогично, здесь приведен пример пользовательского кода, который преобразует List of String в массив значений Double.
С использованием потоков в Java 8
Поток Java 8 предлагает очень крутые способы преобразования объектов.
Средняя оценка 3.6 / 5. Количество голосов: 5
Спасибо, помогите другим — напишите комментарий, добавьте информации к статье.
Или поделись статьей
Видим, что вы не нашли ответ на свой вопрос.
Помогите улучшить статью.
Напишите комментарий, что можно добавить к статье, какой информации не хватает.
Java преобразовать список в массив и наоборот
В этой статье мы быстро узнаем, как преобразовать список Java (скажем, ArrayList ) в массив и наоборот. Если вы хотите узнать больше о ArrayList в целом, не стесняйтесь читать нашу статью о Java ArrayList.
Преобразовать список Java в массив:
Преобразование списка Java в массив очень просто и понятно. Мы можем использовать один из двух доступных вариантов метода toArray () :
Давайте попробуем их:
Метод toArray (T [] array) принимает и возвращает массив. Основная цель передачи массива – сообщить тип массива, который должен быть возвращен:
- Если переданный массив имеет достаточно места, элементы сохраняются в одном массиве и возвращается ссылка на этот массив.
- Если в нем больше места, чем количество элементов, массив сначала заполняется элементами списка, а оставшиеся значения заполняются как ноль
- Или же, если у него недостаточно места для хранения элементов, создается, заполняется и возвращается новый массив того же типа и достаточного размера.
Преобразовать массив Java в список :
Чтобы преобразовать массив в список в Java, мы можем выбрать один из следующих подходов:
1. Наивный подход (итерация):
Один простой способ – перебрать все элементы массива и добавить их во вновь созданный список:
Array.from()
Статический метод Array.from Array.from() создает новый неглубоко скопированный экземпляр Array из итерируемого или подобного массиву объекта.
Try it
Syntax
Parameters
Итерабельный или массивоподобный объект для преобразования в массив.
Функция Map для вызова каждого элемента массива.
Значение, используемое как this при выполнении mapFn .
Return value
Description
Array.from() позволяет создать Array s из:
- итерируемые объекты (такие объекты, как Map и Set ); или, если объект не является итерируемым,
- массивоподобные объекты (объекты со свойством length и индексированными элементами).
Array.from() имеет необязательный параметр mapFn , который позволяет вам выполнять функцию map() для каждого элемента создаваемого массива.
Точнее говоря, Array.from(obj, mapFn, thisArg) имеет тот же результат, что и Array.from(obj).map(mapFn, thisArg) , за исключением того, что он не создает промежуточный массив, а mapFn получает только два аргумента ( элемент , index ) без всего массива, так как массив все еще находится в стадии построения.
Примечание. Это особенно важно для определенных подклассов массивов, таких как типизированные массивы , поскольку промежуточный массив обязательно будет иметь усеченные значения, чтобы соответствовать соответствующему типу.