В этом практическом занятии (лабораторной работе) вы научитесь преобразовывать список целых чисел (Integer List) в массив примитивных целых чисел (int Array) на Java. Это распространенная задача в программировании на Java, когда вам нужно работать с массивами примитивных типов после сбора данных в списке.
Мы рассмотрим два различных подхода для выполнения этого преобразования:
Использование Stream API Java с методом stream.mapToInt()
Использование метода ArrayUtils.toPrimitive() из библиотеки Apache Commons Lang
По завершении этого практического занятия вы освоите оба метода и сможете применять их в своих собственных Java-приложениях.
На первом этапе мы создадим Java-класс, чтобы продемонстрировать методы преобразования. Мы будем использовать Maven для управления зависимостями и структурой проекта.
Сначала убедитесь, что вы находитесь в директории проекта:
cd /home/labex/project
Создайте новый Java-файл в исходной директории Maven:
cd src/main/java
Создайте файл IntegerListToIntArray.java со следующим содержимым:
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang3.ArrayUtils;
public class IntegerListToIntArray {
public static void main(String[] args) {
System.out.println("Converting Integer List to int Array Demo");
System.out.println("---------------------------------------");
// Мы добавим наш код здесь на следующих шагах
}
}
Скомпилируйте код с использованием Maven:
cd /home/labex/project
mvn compile
Запустите программу, чтобы убедиться, что она работает:
mvn exec:java
В консоли должна появиться заголовочная строка. Если ошибок нет, вы можете перейти к следующему шагу.
Создание и заполнение списка целых чисел (Integer List)
На этом этапе мы создадим список объектов Integer и добавим в него несколько чисел. Прежде чем приступить к написанию кода, разберемся, почему нам нужно это преобразование.
Зачем преобразовывать список целых чисел (Integer List) в массив примитивных целых чисел (int Array)?
В Java есть два способа работать с числами:
Примитивный тип (int):
Базовый тип числа, который хранит только само число.
Требует меньше памяти.
Не может быть использован напрямую в коллекциях, таких как List.
Пример: int x = 5;
Обертка (Wrapper Class, Integer):
Объект, содержащий число.
Может быть использован в коллекциях, таких как List.
Имеет дополнительные методы и функции.
Пример: Integer x = 5;
Часто мы собираем числа в списке (что требует объектов Integer), но некоторые методы нуждаются в массиве примитивных типов int для более высокой производительности. Именно поэтому нам нужно преобразовывать между ними.
Обновление Java-кода
Давайте изменим файл IntegerListToIntArray.java, чтобы создать и отобразить список чисел:
Убедитесь, что вы находитесь в директории проекта:
cd /home/labex/project
Откройте файл src/main/java/IntegerListToIntArray.java и добавьте следующий код внутри метода main после существующих инструкций вывода на экран:
// Create a List of Integer objects
List<Integer> integerList = new ArrayList<>();
// Add some numbers to the list
integerList.add(1);
integerList.add(2);
integerList.add(3);
integerList.add(4);
integerList.add(5);
// Display the list contents
System.out.println("Original Integer List:");
for (Integer num : integerList) {
System.out.print(num + " ");
}
System.out.println("\n");
Скомпилируйте и запустите программу:
mvn compile
mvn exec:java
Вы должны увидеть вывод, похожий на следующий:
Converting List List to int Array Demo
-------
Original Integer List:
1 2 3 4 5
Этот вывод подтверждает, что мы успешно создали список объектов Integer и заполнили его числами. На следующем этапе мы научимся преобразовывать этот список в массив примитивных типов int.
Преобразование списка в массив с использованием Stream API
На этом этапе мы научимся первому методу преобразования списка объектов Integer в массив примитивных типов int с использованием Stream API Java. Stream API предоставляет современный и эффективный способ обработки коллекций данных.
Понимание Java Stream
Stream в Java представляет собой своего рода конвейер, который может обрабатывать данные пошагово:
Он берет данные из источника (нашего списка).
Обрабатывает данные (преобразует Integer в int).
Собирает результаты (в массив).
Добавление кода преобразования
Убедитесь, что вы находитесь в директории проекта:
cd /home/labex/project
Откройте файл src/main/java/IntegerListToIntArray.java и добавьте этот код после кода создания списка:
// Method 1: Using Stream API
System.out.println("Converting using Stream API:");
// Convert Integer List to int array using Stream
int[] intArrayUsingStream = integerList.stream() // Create a stream from the list
.mapToInt(Integer::intValue) // Convert Integer to int
.toArray(); // Collect results into an array
// Print the converted array
System.out.println("Converted int Array:");
for (int value : intArrayUsingStream) {
System.out.print(value + " ");
}
System.out.println("\n");
Скомпилируйте и запустите программу:
mvn compile
mvn exec:java
Вы должны увидеть вывод, похожий на следующий:
Converting Integer List to int Array Demo
---------------------------------------
Original Integer List:
1 2 3 4 5
Converting using Stream API:
Converted int Array:
1 2 3 4 5
Понимание кода
Разберем, как работает преобразование:
integerList.stream() - Создает поток (stream) из нашего списка.
.mapToInt(Integer::intValue) - Преобразует каждый объект Integer в примитивный тип int.
.toArray() - Собирает все значения int в массив.
Integer::intValue называется ссылкой на метод. Это сокращенный способ записи number -> number.intValue().
Преобразование списка в массив с использованием ArrayUtils
На этом этапе мы научимся второму методу преобразования списка с использованием класса ArrayUtils из библиотеки Apache Commons Lang. Этот метод более простой и может быть легче для понимания новичкам.
Понимание класса ArrayUtils
Класс ArrayUtils предоставляет множество полезных методов для работы с массивами. Метод toPrimitive() в частности помогает нам преобразовать обертки (например, Integer) в примитивные типы (например, int).
Добавление кода преобразования с использованием ArrayUtils
Добавьте следующий код в файл IntegerListToIntArray.java после кода, использующего Stream API:
// Method 2: Using ArrayUtils
System.out.println("Converting using ArrayUtils:");
// First convert List<Integer> to Integer[]
Integer[] intermediateArray = integerList.toArray(new Integer[0]);
// Then convert Integer[] to int[]
int[] intArrayUsingArrayUtils = ArrayUtils.toPrimitive(intermediateArray);
// Print the converted array
System.out.println("Converted int Array:");
for (int value : intArrayUsingArrayUtils) {
System.out.print(value + " ");
}
System.out.println("\n");
Скомпилируйте и запустите программу:
mvn compile
mvn exec:java
Теперь в выводе должны отобразиться оба метода преобразования:
Converting Integer List to int Array Demo
---------------------------------------
Original Integer List:
1 2 3 4 5
Converting using Stream API:
Converted int Array:
1 2 3 4 5
Converting using ArrayUtils:
Converted int Array:
1 2 3 4 5
Понимание кода
Метод с использованием ArrayUtils работает в два этапа:
integerList.toArray(new Integer[0]) - Преобразует список в массив объектов Integer.
ArrayUtils.toPrimitive() - Преобразует массив объектов Integer в массив примитивных типов int.
Этот метод более простой, но требует наличия библиотеки Apache Commons Lang.
Резюме
В этом LabEx вы узнали два различных способа преобразования списка объектов Integer в массив примитивных типов int на Java: