Преобразование массивов int[] в Integer[] в Java

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ: Использование потоков Java 8

Для того чтобы преобразовать массив примитивов int[] в массив оберток Integer[], можно воспользоваться возможностями потоков Java 8:

Java
Скопировать код
int[] intArray = {1, 2, 3, 4};
Integer[] integerArray = Arrays.stream(intArray)
                               .boxed()
                               .toArray(Integer[]::new);

Метод .boxed() позволяет "упаковать" каждое значение из int в Integer. Метод .toArray() собирает все эти значения в массив.

Кинга Идем в IT: пошаговый план для смены профессии

Старая добрая школа: Метод с for-циклом

Если потоки недоступны или вы предпочитаете классический подход, то воспользуйтесь следующим циклом for:

Java
Скопировать код
int[] intArray = {1, 2, 3, 4};
Integer[] integerArray = new Integer[intArray.length];
for (int i = 0; i < intArray.length; i++) {
    integerArray[i] = Integer.valueOf(intArray[i]);
}

Метод Integer.valueOf() преобразует примитивный int в объект Integer.

Обратимся к сторонним библиотекам: Apache Commons Lang

Если в вашем проекте используется библиотека Apache Commons Lang, то вы можете применить удобную функцию toObject() для преобразования массива:

Java
Скопировать код
int[] intArray = {1, 2, 3, 4};
Integer[] integerArray = ArrayUtils.toObject(intArray);

Это функция немедленно преобразует массив примитивов в массив объектов.

Рассмотрение производительности и неизменяемости

Когда при работе с большими данными возникают вопросы производительности, следует использовать неизменяемые объекты вместо упакованных типов. Рассмотрим пример:

Java
Скопировать код
public final class ImmutablePair {
    private final int first;
    private final int second;
    
    public ImmutablePair(int a, int b) {
        this.first = a;
        this.second = b;
    }
    
    // Не забудьте корректно переопределить методы hashCode и equals
}

Map<ImmutablePair, Integer> map = new HashMap<>();

Визуализация

Преобразование int[] в Integer[] можно сравнить с трансформацией компактных автомобилей в гигантские грузовики — оба преобразования увеличивают размер:

Этап процессаВизуальное представление
Исходный массив🚗🚗🚗 (int[])
Преобразование🔄
Получившийся массив🚚🚚🚚 (Integer[])

Особые соображения при сопоставлении ключей

Обратите внимание, что использовать int[] как ключ для Map не получится, поскольку в Java в качестве ключей может быть использован только Integer[], где равенство определяется по идентичности:

Java
Скопировать код
Map<List<Integer>, String> map = new HashMap<>();
map.put(Arrays.asList(integerArray), "Value");

Швейцарский армейский нож: метод IntStream.of()

Примените IntStream.of(), чтобы без проблем преобразовать int в Integer, учитывая, что массив может быть пустым:

Java
Скопировать код
int[] emptyArray = {};
Integer[] integerArray = IntStream.of(emptyArray)
                                  .boxed()
                                  .toArray(Integer[]::new);

Пользовательская структура данных для комбинаций Integer

Создание собственной структуры данных для управления комбинациями чисел типа Integer может значительно упростить жизнь:

Java
Скопировать код
public class IntegerCombo {
    // Атрибуты, конструкторы, методы доступа и логика подсчёта
}

Полезные материалы

  1. [How can I convert List<Integer> to int[] in Java? – Stack Overflow](https://stackoverflow.com/questions/960431/how-can-i-convert-listinteger-to-int-in-java)
  2. Stream (Java Platform SE 8)
  3. Autoboxing and Unboxing (The Java™ Tutorials)
  4. ArrayUtils (Apache Commons Lang 3.14.0 API)
  5. [Effective Java, 3rd Edition [Book]](https://www.oreilly.com/library/view/effective-java-3rd/9780134686097/)