将对象数组转换为其原始类型的数组

如果您有一个具有原始类型(例如Byte,Integer,Char等)的Java对象数组。有没有一种巧妙的方法可以将其转换为原始类型的数组?特别是可以做到这一点,而不必创建新的数组并遍历内容。


因此,例如


Integer[] array

将其转换为最简洁的方法是什么


int[] intArray

不幸的是,在Hibernate和我们无法控制的某些第三方库之间进行接口连接时,这是我们经常要做的事情。看来这是一个很普通的操作,所以如果没有捷径,我会感到惊讶。


谢谢你的帮助!


HUH函数
浏览 337回答 3
3回答

吃鸡游戏

不幸的是,Java平台中没有任何东西可以做到这一点。顺便说一句,您还需要显式处理数组中的null元素Integer[](这些元素int将用于什么?)。

繁花不似锦

使用Java 8中引入的流,可以做到这一点:int[] intArray = Arrays.stream(array).mapToInt(Integer::intValue).toArray();然而,目前只有基本流int,long和double。如果您需要转换为其他原始类型(例如,byte没有外部库的最短方法),则如下: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]);NullPointerException如果您的任何元素都为,所有这些都将引发null。

慕妹3146593

特别是可以做到这一点,而不必创建新的数组并遍历内容。您无法在Java中将Integer数组转换为int(即,您无法更改数组元素的类型)。因此,您必须创建一个新的int []数组并将Integer对象的值复制到其中,或者可以使用适配器:class IntAdapter {&nbsp; &nbsp; private Integer[] array;&nbsp; &nbsp; public IntAdapter (Integer[] array) { this.array = array; }&nbsp; &nbsp; public int get (int index) { return array[index].intValue(); }}这可以使您的代码更具可读性,并且IntAdapter对象将只消耗几个字节的内存。适配器的最大优点是您可以在这里处理特殊情况:class IntAdapter {&nbsp; &nbsp; private Integer[] array;&nbsp; &nbsp; public int nullValue = 0;&nbsp; &nbsp; public IntAdapter (Integer[] array) { this.array = array; }&nbsp; &nbsp; public int get (int index) {&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; return array[index] == null ? nullValue : array[index].intValue();&nbsp; &nbsp; }}另一个解决方案是使用Commons Primitives,它包含许多预定义的适配器。在您的情况下,请查看ListIntList。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java