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