章
目
录
学习将基元数组(int、long 或 double)转换为对象数组(Integer、Double 或 Long),反之亦然。例如,我们将把 int[] 转换为 Integer[],然后再将 Integer[] 转换回 int[]。
请注意,所有的技巧都遵循相同的转换过程逻辑,即遍历现有数组,将当前项转换为对象(或基元类型),然后添加到新数组中。下面讨论的API添加了一些语法糖,以使代码更具可读性。
1.使用流API进行转换
我们需要使用 Stream.toArray() 方法,该方法返回包含给定流中的项的数组。我们需要在收集到新数组之前转换项目类型。
1.1. 基元数组到对象数组的转换
Java程序将 int[] 转换为 Integer[]。请注意,默认情况下,toArray() 方法返回 Object[],因此指定生成函数 Integer[]::new 很重要。
int[] primitiveArray = new int[]{0, 1, 2, 3, 4, 5};
Integer[] outputArray = Arrays.stream(primitiveArray)
.boxed()
.toArray(Integer[]::new);
1.2. 对象数组到基元数组的转换
Java程序将 Integer[] 转换为 int[]。为了将 Integer 对象转换为 int 值,我们使用了 stream.mapToInt()
函数。该方法返回一个 IntStream,其中包含与数组中的 Integer 对象相对应的 int 值。
如果数组中有空项,则此方法将抛出 NullPointerException。
Integer[] objectArray = new Integer[]{0, 1, 2, 3, 4, 5};
int[] outputArray = Arrays.stream(objectArray)
.mapToInt(Integer::intValue)
.toArray();
2.使用Apache Common的ArrayUtils进行转换
ArrayUtils 类具有许多静态实用程序方法,用于在单个语句中执行常见任务。它提高了代码的可读性,因此容易维护这样的代码。
这两种方法都在内部使用for循环来遍历原始数组并填充新数组,因此在性能上与使用Stream API相比,你不会看到太大的差异。
在 Maven 仓库中查找Common’s Lang的最新版本。
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version>
</dependency>
2.1. 基元数组到对象数组的转换
ArrayUtils.toObject() 方法将基元类型的数组转换为对象数组。如果输入数组为空,则该方法返回null。
int[] primitiveArray = new int[]{0, 1, 2, 3, 4, 5};
Integer[] outputArray = ArrayUtils.toObject(primitiveArray);
2.2. 对象数组到基元数组的转换
ArrayUtils.toPrimitive() 方法将对象数组转换为相应的基元类型数组。如果数组内容为空,则此方法将抛出NullPointerException。
Integer[] objectArray = new Integer[]{0, 1, 2, 3, 4, 5};
int[] outputArray = ArrayUtils.toPrimitive(objectArray);
3.结论
在这个简单的Java教程中,我们学习了如何将基元数组转换为对象数组,并将对象数组转换为基元数组。我们学会了如何使用Java Streams API和Apache Common的ArrayUtils类来实现这些操作。