Преобразование массива
- Массив int[] → Коллекция List<Integer>
- Коллекция List<Integer> → Массив int[]
- Альтернатива: вручную, без Stream API
- Почему нельзя использовать List<int>?
- Вывод
Работа с массивами и коллекциями — одна из основ 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
Зарегистрируйтесь или войдите, чтобы иметь возможность оставить комментарий.