Преобразование массива

Author: Tatyana Milkina
  1. Массив int[] → Коллекция List<Integer>
  2. Коллекция List<Integer> → Массив int[]
  3. Альтернатива: вручную, без Stream API
  4. Почему нельзя использовать List<int>?
  5. Вывод

Работа с массивами и коллекциями — одна из основ Java-разработки. Но массивы и коллекции имеют разные особенности:

Массивы — это структуры фиксированной длины.

Коллекции (List, Set, и др.) — гибкие контейнеры, удобные для добавления, удаления и фильтрации данных.

Часто возникает задача: преобразовать массив int[] в List<Integer> и обратно. Ниже показано, как это делается с использованием Stream API.

1. Массив int[] → Коллекция List<Integer>

int[] numbers = {1, 2, 3, 4, 5};

List<Integer> list = Arrays.stream(numbers) // превращаем в IntStream
                           .boxed()         // упаковываем примитивы в Integer
                           .collect(Collectors.toList());

System.out.println(list); // [1, 2, 3, 4, 5]

Метод boxed() превращает поток примитивов IntStream в поток объектов Stream<Integer>, а затем мы собираем его в коллекцию с помощью collect(Collectors.toList()).

2. Коллекция List<Integer> → Массив int[]

List<Integer> list = Arrays.asList(10, 20, 30, 40);

int[] array = list.stream()
                  .mapToInt(Integer::intValue)
                  .toArray();

System.out.println(Arrays.toString(array)); // [10, 20, 30, 40]

Метод mapToInt() преобразует поток объектов Integer обратно в поток примитивов int, а затем .toArray() превращает его в массив.

3. Альтернатива: вручную, без Stream API

Если вы работаете со старыми версиями Java или хотите обойтись без стримов:

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

int[] backToArray = new int[list.size()];
for (int i = 0; i < list.size(); i++) {
    backToArray[i] = list.get(i);
}

4. Почему нельзя использовать List<int>?

Java-коллекции работают только с объектами, а int — это примитив. Поэтому мы используем обёртку Integer. Стримы помогают нам оборачивать (boxed()) и разворачивать (mapToInt()) примитивы.

5. Вывод

Преобразование Метод
int[] → List<Integer>      Arrays.stream(...).boxed().collect(...)
List<Integer> → int[] list.stream().mapToInt(...).toArray()

Используйте Stream API, если хотите лаконичный и читаемый код. А если вам нужно больше контроля — классические циклы остаются отличной альтернативой.

Курс 'Java для начинающих' на Udemy Курс 'Java для начинающих' на Udemy
Читайте также:
Комментарии