将 Integer 列表转换为 int 数组

JavaJavaBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

本实验将引导你完成在 Java 中将整数列表(Integer List)转换为整数数组(int Array)的过程。当你在列表中收集数据后需要使用基本类型数组时,这是 Java 编程中的一项常见任务。

我们将探索两种不同的方法来完成此转换:

  1. 使用 Java 的 Stream API 和 stream.mapToInt() 方法
  2. 使用 Apache Commons Lang 的 ArrayUtils.toPrimitive() 方法

在本实验结束时,你将理解这两种方法,并能够在自己的 Java 应用程序中应用它们。

为我们的实验创建一个 Java 类

在第一步中,我们将创建一个 Java 类来演示转换方法。我们将使用 Maven 来管理依赖项和项目结构。

  1. 首先,确认你位于项目目录中:
cd /home/labex/project
  1. 在 Maven 源目录中创建一个新的 Java 文件:
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 列表并向其中添加一些数字。在开始编码之前,让我们先了解一下为什么需要进行这种转换。

为什么要在整数列表(Integer List)和整数数组(int Array)之间进行转换?

在 Java 中,有两种处理数字的方式:

  1. 基本数据类型 (int):

    • 基本的数字类型,仅存储数字
    • 占用较少的内存
    • 不能直接用于列表(List)等集合中
    • 示例:int x = 5;
  2. 包装类 (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 Integer List to int Array Demo
---------------------------------------
Original Integer List:
1 2 3 4 5

此输出确认我们已成功创建一个 Integer 列表并向其中填充了数字。在下一步中,我们将学习如何将这个列表转换为基本类型的 int 数组。

使用 Stream API 将列表转换为数组

在这一步中,我们将学习第一种使用 Java 的 Stream API 将 Integer 列表转换为 int 数组的方法。Stream API 提供了一种现代且高效的方式来处理数据集合。

理解 Java 流(Stream)

Java 中的流(Stream)就像一个可以逐步处理数据的管道:

  • 它从数据源(我们的列表)获取数据
  • 处理数据(将 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() - 从我们的列表创建一个流
  2. .mapToInt(Integer::intValue) - 将每个 Integer 转换为 int
  3. .toArray() - 将所有的 int 值收集到一个数组中

Integer::intValue 被称为方法引用。它是 number -> number.intValue() 的简写形式。

使用 ArrayUtils 将列表转换为数组

在这一步中,我们将学习第二种方法,即使用 Apache Commons Lang 库的 ArrayUtils 类来转换我们的列表。这种方法更为直接,对于初学者来说可能更容易理解。

理解 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 库。

总结

在这个实验中,你学习了两种在 Java 中将 Integer 列表转换为 int 数组的不同方法:

  1. 使用 Java 的 Stream API:
int[] array = integerList.stream().mapToInt(Integer::intValue).toArray();
  • 现代且函数式的方法
  • Java 内置功能
  • 适合逐步处理数据
  1. 使用 Apache Commons Lang 的 ArrayUtils:
int[] array = ArrayUtils.toPrimitive(integerList.toArray(new Integer[0]));
  • 更直接的方法
  • 需要外部库
  • 易于理解和使用

这两种方法都能达到相同的效果,你可以根据自己的需求选择更合适的方法:

  • 如果你想要采用现代的函数式方法,可使用 Stream API。
  • 如果你想要更简单、易读的代码,可使用 ArrayUtils。

现在,你已经掌握了在 Java 应用程序中进行 Integer 列表和 int 数组之间转换的知识。