5

Как преобразовать int[] в List<Integer> в Java?

10

Как конвертировать int[] в List<Integer> в Java?

Я, конечно, заинтересован в любом решении, кроме как делать это в цикле, по элементу. Если других вариантов не будет, я выберу этот как лучший, чтобы показать, что такой функционал не является частью Java.

5 ответ(ов)

3

Нет простого способа преобразовать массив int[] в List<Integer>, поскольку метод Arrays.asList не обрабатывает автопаковку и просто создаст List<int[]>, что не является тем, что вам нужно. Вам придется создать вспомогательный метод.

int[] ints = {1, 2, 3};
List<Integer> intList = new ArrayList<Integer>(ints.length);
for (int i : ints) {
    intList.add(i);
}

Этот код создает новый список List<Integer> и заполняет его значениями из массива ints.

1

Arrays.asList не будет работать так, как ожидают некоторые из других ответов.

Этот код не создаст список из 10 целых чисел. Он напечатает 1, а не 10:

int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
List lst = Arrays.asList(arr);
System.out.println(lst.size());

Вместо этого код ниже создаст список целых чисел:

List<Integer> lst = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

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

С другой стороны, если ваш массив содержит объекты, а не примитивы, то Arrays.asList будет работать корректно:

String str[] = { "Гомер", "Мардж", "Барт", "Лиза", "Мэгги" };
List<String> lst = Arrays.asList(str);
0

В качестве альтернативного решения я предложу другой метод. Здесь использован анонимный класс без использования циклов, который делает применение автопаковки:

public List<Integer> asList(final int[] is) {
    return new AbstractList<Integer>() {
        public Integer get(int i) { return is[i]; }
        public int size() { return is.length; }
    };
}

Этот код создаёт список List<Integer>, который позволяет работать с массивом примитивов int[] как со списком объектов Integer. Мы переопределяем методы get и size анонимного класса, что позволяет эффективно использовать автопаковку при обращении к элементам массива.

0

Самый компактный фрагмент кода будет следующим:

public List<Integer> myWork(int[] array) {
    return Arrays.asList(ArrayUtils.toObject(array));
}

Где ArrayUtils импортируется из библиотеки commons-lang. Обратите внимание, что toObject преобразует массив примитивов в массив объектов, что позволяет использовать его с Arrays.asList().

0

В Java 8 можно преобразовать массив int в List<Integer> с помощью стрима. Приведу два примера, как это можно сделать.

Первый способ — используя Collections.addAll:

int[] ints = {1, 2, 3};
List<Integer> list = new ArrayList<Integer>();
Collections.addAll(list, Arrays.stream(ints).boxed().toArray(Integer[]::new));

В этом примере мы создаем новый ArrayList, затем используем Arrays.stream(ints) для получения стрима из массива и преобразовываем его в объекты Integer с помощью boxed(). После этого мы преобразуем стрим в массив Integer[] с помощью toArray, который затем добавляется в список.

Второй способ — с использованием Collectors:

List<Integer> list = Arrays.stream(ints).boxed().collect(Collectors.toList());

Этот способ более лаконичен. Мы просто создаем стрим из массива ints, применяем boxed() для конвертации примитивных int в объекты Integer, а затем собираем результаты в список с помощью Collectors.toList().

Оба способа корректны, но второй выглядит более элегантно и предпочтительнее.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь