Преобразование между массивом примитивов и массивом объектов

Научитесь преобразовывать массив примитивов(int, long или double) в массив объектов(Integer, Double или Long) и наоборот. Например, мы преобразуем int[] в Integer[], а затем преобразуем обратно Integer[] в int[].

Обратите внимание, что все методы следуют одной и той же логике для процесса преобразования, т. е. итерируют по существующему массиву, преобразуют текущий элемент в объект(или примитив) и добавляют в новый массив. API, обсуждаемые ниже, добавляют синтаксический сахар, чтобы сделать код более читаемым.

1. Конвертация с использованием Stream API

Нам нужно использовать метод Stream.toArray(), который возвращает массив, содержащий элементы из заданного потока. Нам нужно преобразовать тип элемента перед тем, как собирать его в новый массив.

1.1. Примитивный массив в массив объектов

Программа Java для преобразования int[] в Integer[]. Обратите внимание, что по умолчанию метод toArray() возвращает Object[], поэтому важно указать функцию-генератор Integer[]::new.

int[] primitiveArray = new int[]{0, 1, 2, 3, 4, 5};Integer[] outputArray = Arrays.stream(primitiveArray).boxed().toArray(Integer[]::new);

1.2. Объектный массив в примитивный массив

Программа Java для преобразования Integer[] в int[]. Чтобы преобразовать объект Integer в значение int, мы используем функцию stream.mapToInt(). Этот метод возвращает IntStream, состоящий из значений int, соответствующих объектам Integer в массиве.

Если в массиве есть пустые элементы, то этот метод выдаст исключение NullPointerException.

Integer[] objectArray = new Integer[]{0, 1, 2, 3, 4, 5};int[] outputArray = Arrays.stream(objectArray).mapToInt(Integer::intValue).toArray();

2. Конвертация с использованием ArrayUtils от Apache Common

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

Оба метода используют цикл for для итерации по исходному массиву и заполнения нового массива, поэтому с точки зрения производительности вы увидите большую разницу по сравнению с использованием Stream API.

Последнюю версию Common's Lang можно найти в репозитории Maven.

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

2.1. Примитивный массив в массив объектов

Метод ArrayUtils.toObject() преобразует массив примитивов в массив объектов. Метод возвращает null для входного массива null.

int[] primitiveArray = new int[]{0, 1, 2, 3, 4, 5};Integer[] outputArray = ArrayUtils.toObject(primitiveArray);

2.2. Объектный массив в примитивный массив

Метод ArrayUtils.toPrimitive() преобразует массив объектов в массив соответствующих примитивов. Этот метод выдает исключение NullPointerException, если содержимое массива равно null.

Integer[] objectArray = new Integer[]{0, 1, 2, 3, 4, 5};int[] outputArray = ArrayUtils.toPrimitive(objectArray);

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

В этом простом руководстве по Java мы научились преобразовывать примитивные массивы в массивы объектов и преобразовывать массивы объектов в примитивные массивы. Мы научились использовать для этого Java Streams API и класс ArrayUtils Apache Common.

Оба метода будут

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

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