How to convert an ArrayList containing Integers to primitive int array?
Как преобразовать ArrayList, содержащий целые числа, в примитивный массив int?
Я пытаюсь преобразовать ArrayList, содержащий целочисленные объекты, в примитивный int [] с помощью следующего фрагмента кода, но он выдает ошибку во время компиляции. Возможно ли преобразовать в Java?
List<Integer> x = newArrayList<Integer>(); int[] n = (int[])x.toArray(int[x.size()]);
Переведено автоматически
Ответ 1
Если вы используете java-8, есть и другой способ сделать это.
получение IntStream путем сопоставления каждого элемента с самим собой (функция идентификации), распаковки int значения, удерживаемого каждым Integer объектом (выполняется автоматически начиная с Java 5)
получение массива int путем вызова toArray
Вы также можете явно вызвать intValue через ссылку на метод, т.е:
Также стоит упомянуть, что вы могли бы получить NullPointerException если у вас есть какая-либо null ссылка в списке. Этого можно легко избежать, добавив условие фильтрации в конвейер stream, подобное этому:
//.filter(Objects::nonNull) also works int[] arr = list.stream().filter(i -> i != null).mapToInt(i -> i).toArray();
Вы можете преобразовать, но я не думаю, что есть что-то встроенное, чтобы сделать это автоматически:
publicstaticint[] convertIntegers(List<Integer> integers) { int[] ret = newint[integers.size()]; for (int i=0; i < ret.length; i++) { ret[i] = integers.get(i).intValue(); } return ret; }
(Обратите внимание, что это вызовет исключение NullPointerException, если либо integers, либо любой элемент внутри него null.)
РЕДАКТИРОВАТЬ: Согласно комментариям, вы можете захотеть использовать итератор списка, чтобы избежать значительных затрат при работе со списками, такими как LinkedList:
publicstaticint[] convertIntegers(List<Integer> integers) { int[] ret = newint[integers.size()]; Iterator<Integer> iterator = integers.iterator(); for (inti=0; i < ret.length; i++) { ret[i] = iterator.next().intValue(); } return ret; }