В этом практическом занятии (лабораторной работе) вы научитесь преобразовывать список целых чисел (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:
We use cookies for a number of reasons, such as keeping the website reliable and secure, to improve your experience on our website and to see how you interact with it. By accepting, you agree to our use of such cookies. Privacy Policy