Если вы используете 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]