Преобразование массивов int[] в Integer[] в Java
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ: Использование потоков Java 8
Для того чтобы преобразовать массив примитивов int[]
в массив оберток Integer[]
, можно воспользоваться возможностями потоков Java 8:
int[] intArray = {1, 2, 3, 4};
Integer[] integerArray = Arrays.stream(intArray)
.boxed()
.toArray(Integer[]::new);
Метод .boxed()
позволяет "упаковать" каждое значение из int
в Integer
. Метод .toArray()
собирает все эти значения в массив.
Старая добрая школа: Метод с for-циклом
Если потоки недоступны или вы предпочитаете классический подход, то воспользуйтесь следующим циклом for
:
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()
для преобразования массива:
int[] intArray = {1, 2, 3, 4};
Integer[] integerArray = ArrayUtils.toObject(intArray);
Это функция немедленно преобразует массив примитивов в массив объектов.
Рассмотрение производительности и неизменяемости
Когда при работе с большими данными возникают вопросы производительности, следует использовать неизменяемые объекты вместо упакованных типов. Рассмотрим пример:
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[]
, где равенство определяется по идентичности:
Map<List<Integer>, String> map = new HashMap<>();
map.put(Arrays.asList(integerArray), "Value");
Швейцарский армейский нож: метод IntStream.of()
Примените IntStream.of()
, чтобы без проблем преобразовать int
в Integer
, учитывая, что массив может быть пустым:
int[] emptyArray = {};
Integer[] integerArray = IntStream.of(emptyArray)
.boxed()
.toArray(Integer[]::new);
Пользовательская структура данных для комбинаций Integer
Создание собственной структуры данных для управления комбинациями чисел типа Integer
может значительно упростить жизнь:
public class IntegerCombo {
// Атрибуты, конструкторы, методы доступа и логика подсчёта
}
Полезные материалы
- [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)
- Stream (Java Platform SE 8)
- Autoboxing and Unboxing (The Java™ Tutorials)
- ArrayUtils (Apache Commons Lang 3.14.0 API)
- [Effective Java, 3rd Edition [Book]](https://www.oreilly.com/library/view/effective-java-3rd/9780134686097/)