将对象数组转换为其基元类型的数组

2022-08-31 12:19:26

如果您有一个具有基元类型的 Java 对象数组(例如 Byte、Integer、Char 等)。有没有一种巧妙的方法可以将其转换为基元类型的数组?特别是,无需创建新数组并循环访问内容即可完成此操作。

例如,给定

Integer[] array

什么是最整洁的方法,以将其转换为

int[] intArray

不幸的是,这是我们在Hibernate和一些我们无法控制的第三方库之间接口时必须经常做的事情。这似乎是一个非常常见的操作,所以如果没有捷径,我会感到惊讶。

感谢您的帮助!


答案 1

再一次,Apache Commons Lang是你的朋友。他们提供了ArrayUtils.toPrimitive(),它完全可以满足您的需求。您可以指定处理空值的方式。


答案 2

使用Java 8中引入的,可以完成此操作:

int[] intArray = Arrays.stream(array).mapToInt(Integer::intValue).toArray();

但是,目前只有 和 的原始流。如果您需要转换为另一种基元类型,例如没有外部库的最短方法,请执行以下操作:intlongdoublebyte

byte[] byteArray = new byte[array.length];
for(int i = 0; i < array.length; i++) byteArray[i] = array[i];

或者,如果需要,可以将 for 循环替换为流:

IntStream.range(0, array.length).forEach(i -> byteArray[i] = array[i]);

所有这些将抛出一个,如果你的任何元素是.NullPointerExceptionnull