Java中基元数组和对象数组之间转换

培训教学 潘老师 7个月前 (09-24) 151 ℃ (0) 扫码查看

学习将基元数组(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类来实现这些操作。


版权声明:本站文章,如无说明,均为本站原创,转载请注明文章来源。如有侵权,请联系博主删除。
本文链接:https://www.panziye.com/teach/9238.html
喜欢 (0)
请潘老师喝杯Coffee吧!】
分享 (0)
用户头像
发表我的评论
取消评论
表情 贴图 签到 代码

Hi,您需要填写昵称和邮箱!

  • 昵称【必填】
  • 邮箱【必填】
  • 网址【可选】