Если вы используете java-8 , есть и другой способ сделать это.
int[] arr = list.stream().mapToInt(i -> i).toArray();
Что он делает:
- получение
Stream<Integer>
из списка
- получение
IntStream
путем сопоставления каждого элемента с самим собой (функция идентификации), распаковка значения int
, удерживаемого каждым объектом Integer
(выполняется автоматически после Java 5)
- получение массива
int
путем вызова toArray
Вы также можете явно вызвать intValue
через ссылку на метод, т. Е.
int[] arr = list.stream().mapToInt(Integer::intValue).toArray();
Также стоит упомянуть, что вы можете получить NullPointerException
, если у вас есть ссылка null
в списке. Этого можно легко избежать, добавив условие фильтрации в конвейер потока следующим образом:
//.filter(Objects::nonNull) also works
int[] arr = list.stream().filter(i -> i != null).mapToInt(i -> i).toArray();
Пример: * * тысяча тридцать-один
List<Integer> list = Arrays.asList(1, 2, 3, 4);
int[] arr = list.stream().mapToInt(i -> i).toArray(); //[1, 2, 3, 4]
list.set(1, null); //[1, null, 3, 4]
arr = list.stream().filter(i -> i != null).mapToInt(i -> i).toArray(); //[1, 3, 4]