Якщо ви використовуєте 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]