Преобразование примитивного массива в список в Java

Научитесь преобразовывать массив примитивов(int, long, float, double, boolean) в список в Java, используя итерации, потоки и такие библиотеки, как Guava и Apache Commons Lang3.

1. Автоупаковка работает с одним примитивным значением, а не с массивом примитивов

В Java мы можем хранить примитивные значения и объекты в массиве. Преобразование массива объектов в список выполняется просто с помощью метода Arrays.asList(arrayOfObjects). Но тот же метод не работает с массивом примитивных значений, поскольку функция автоупаковки Java работает с отдельными примитивными значениями, но не с типами массивов.

List<Integer> list = Arrays.asList(new Integer[]{1,2,3,4}); //Works!List<Integer> list = Arrays.asList(new int[]{1,2,3,4}); //Does not work!

2. Использование ядра Java

В следующих примерах используются основные API Java для преобразования примитивного массива в список, и не требуются дополнительные зависимости в проекте.

2.1 Использование потоков

В Java мы можем представить поток примитивов, используя классы IntStream, LongStream, FloatStream, DoubleStream для соответствующих типов примитивов. Все они содержат метод boxed(), который преобразует примитив в его тип объекта-оболочки. Например, int будет преобразован в тип Integer.

Наконец, мы собираем упакованные типы объектов в список с помощью метода Stream.toList().

int[] intArray = new int[]{0, 1, 2, 3, 4, 5};List<Integer> list = IntStream.of(intArray).boxed().toList();

2.2 Использование итерации

Вместо использования Stream API мы также можем использовать стандартный итерационный подход для упаковки каждого элемента в массиве и сохранения его в списке.

int[] intArray = new int[]{0, 1, 2, 3, 4, 5};List<Integer> list = new ArrayList<Integer>();for(int e : intArray) {list.add(e);} 

3. Использование библиотек с открытым исходным кодом

Для более читаемого кода мы можем воспользоваться решениями, предоставляемыми библиотеками с открытым исходным кодом.

3.1. Ints.asList() в Guava

Ints.asList() принимает примитивный массив и возвращает список типов объектов.

int[] intArray = new int[]{0, 1, 2, 3, 4, 5};List<Integer> list = Ints.asList(intArray);

Не забудьте включить последнюю версию библиотеки Guava в classpath проекта.

<dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>31.1-jre</version></dependency>

3.2 ArrayUtils.toObject() Commons Lang3

ArrayUtils.toObject() преобразует массив примитивных значений в массив типов объектов. Затем мы можем собрать массив объектов в List, используя стандартный метод Arrays.asList().

int[] intArray = new int[]{0, 1, 2, 3, 4, 5};List<Integer> list = Arrays.asList(ArrayUtils.toObject(intArray));

Не забудьте включить последнюю версию библиотеки commons-lang3 в classpath проекта.

<dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.12.0</version></dependency>

4. Заключение

В этом коротком руководстве по Java мы научились преобразовывать массив примитивных значений в список, используя основные API Java и решения, предлагаемые другими библиотеками. Нам нужны эти решения, поскольку Java не поддерживает автоупаковку типов массивов, а автоупаковка разрешена только для одного примитивного значения.

Исходный код на Github

Прокрутить вверх