Преобразование списка Integer в массив int

JavaJavaBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом практическом занятии (лабораторной работе) вы научитесь преобразовывать список целых чисел (Integer List) в массив примитивных целых чисел (int Array) на Java. Это распространенная задача в программировании на Java, когда вам нужно работать с массивами примитивных типов после сбора данных в списке.

Мы рассмотрим два различных подхода для выполнения этого преобразования:

  1. Использование Stream API Java с методом stream.mapToInt()
  2. Использование метода ArrayUtils.toPrimitive() из библиотеки Apache Commons Lang

По завершении этого практического занятия вы освоите оба метода и сможете применять их в своих собственных Java-приложениях.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/DataStructuresGroup(["Data Structures"]) java(("Java")) -.-> java/ObjectOrientedandAdvancedConceptsGroup(["Object-Oriented and Advanced Concepts"]) java(("Java")) -.-> java/FileandIOManagementGroup(["File and I/O Management"]) java(("Java")) -.-> java/BasicSyntaxGroup(["Basic Syntax"]) java/BasicSyntaxGroup -.-> java/data_types("Data Types") java/DataStructuresGroup -.-> java/arrays("Arrays") java/DataStructuresGroup -.-> java/arrays_methods("Arrays Methods") java/DataStructuresGroup -.-> java/collections_methods("Collections Methods") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/classes_objects("Classes/Objects") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/arraylist("ArrayList") java/FileandIOManagementGroup -.-> java/stream("Stream") subgraph Lab Skills java/data_types -.-> lab-117397{{"Преобразование списка Integer в массив int"}} java/arrays -.-> lab-117397{{"Преобразование списка Integer в массив int"}} java/arrays_methods -.-> lab-117397{{"Преобразование списка Integer в массив int"}} java/collections_methods -.-> lab-117397{{"Преобразование списка Integer в массив int"}} java/classes_objects -.-> lab-117397{{"Преобразование списка Integer в массив int"}} java/arraylist -.-> lab-117397{{"Преобразование списка Integer в массив int"}} java/stream -.-> lab-117397{{"Преобразование списка Integer в массив int"}} end

Создание Java-класса для нашего эксперимента

На первом этапе мы создадим Java-класс, чтобы продемонстрировать методы преобразования. Мы будем использовать Maven для управления зависимостями и структурой проекта.

  1. Сначала убедитесь, что вы находитесь в директории проекта:
cd /home/labex/project
  1. Создайте новый Java-файл в исходной директории Maven:
cd src/main/java
Создание Java-файла
  1. Создайте файл 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("---------------------------------------");

        // Мы добавим наш код здесь на следующих шагах
    }
}
  1. Скомпилируйте код с использованием Maven:
cd /home/labex/project
mvn compile
  1. Запустите программу, чтобы убедиться, что она работает:
mvn exec:java

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

Создание и заполнение списка целых чисел (Integer List)

На этом этапе мы создадим список объектов Integer и добавим в него несколько чисел. Прежде чем приступить к написанию кода, разберемся, почему нам нужно это преобразование.

Зачем преобразовывать список целых чисел (Integer List) в массив примитивных целых чисел (int Array)?

В Java есть два способа работать с числами:

  1. Примитивный тип (int):

    • Базовый тип числа, который хранит только само число.
    • Требует меньше памяти.
    • Не может быть использован напрямую в коллекциях, таких как List.
    • Пример: int x = 5;
  2. Обертка (Wrapper Class, Integer):

    • Объект, содержащий число.
    • Может быть использован в коллекциях, таких как List.
    • Имеет дополнительные методы и функции.
    • Пример: Integer x = 5;

Часто мы собираем числа в списке (что требует объектов Integer), но некоторые методы нуждаются в массиве примитивных типов int для более высокой производительности. Именно поэтому нам нужно преобразовывать между ними.

Обновление Java-кода

Давайте изменим файл IntegerListToIntArray.java, чтобы создать и отобразить список чисел:

  1. Убедитесь, что вы находитесь в директории проекта:
cd /home/labex/project
  1. Откройте файл 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");
Добавление чисел в список
  1. Скомпилируйте и запустите программу:
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).
  • Собирает результаты (в массив).

Добавление кода преобразования

  1. Убедитесь, что вы находитесь в директории проекта:
cd /home/labex/project
  1. Откройте файл 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");
  1. Скомпилируйте и запустите программу:
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

Понимание кода

Разберем, как работает преобразование:

  1. integerList.stream() - Создает поток (stream) из нашего списка.
  2. .mapToInt(Integer::intValue) - Преобразует каждый объект Integer в примитивный тип int.
  3. .toArray() - Собирает все значения int в массив.

Integer::intValue называется ссылкой на метод. Это сокращенный способ записи number -> number.intValue().

Преобразование списка в массив с использованием ArrayUtils

На этом этапе мы научимся второму методу преобразования списка с использованием класса ArrayUtils из библиотеки Apache Commons Lang. Этот метод более простой и может быть легче для понимания новичкам.

Понимание класса ArrayUtils

Класс ArrayUtils предоставляет множество полезных методов для работы с массивами. Метод toPrimitive() в частности помогает нам преобразовать обертки (например, Integer) в примитивные типы (например, int).

Добавление кода преобразования с использованием ArrayUtils

  1. Добавьте следующий код в файл 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");
  1. Скомпилируйте и запустите программу:
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 работает в два этапа:

  1. integerList.toArray(new Integer[0]) - Преобразует список в массив объектов Integer.
  2. ArrayUtils.toPrimitive() - Преобразует массив объектов Integer в массив примитивных типов int.

Этот метод более простой, но требует наличия библиотеки Apache Commons Lang.

Резюме

В этом LabEx вы узнали два различных способа преобразования списка объектов Integer в массив примитивных типов int на Java:

  1. Использование Stream API Java:
int[] array = integerList.stream().mapToInt(Integer::intValue).toArray();
  • Современный и функциональный подход.
  • Встроен в Java.
  • Хорош для пошаговой обработки данных.
  1. Использование класса ArrayUtils из библиотеки Apache Commons Lang:
int[] array = ArrayUtils.toPrimitive(integerList.toArray(new Integer[0]));
  • Более простой подход.
  • Требует внешней библиотеки.
  • Легко понять и использовать.

Оба метода дают одинаковый результат, и вы можете выбрать тот, который лучше подходит для ваших нужд:

  • Используйте Stream API, если вам нужен современный, функциональный подход.
  • Используйте ArrayUtils, если вам нужен более простой и читаемый код.

Теперь у вас есть знания для преобразования между списками Integer и массивами int в ваших Java-приложениях.