为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

HUH函数 2019-12-03 10:59:07
如果您有一个具有原始类型(例如Byte,Integer,Char等)的Java对象数组。有没有一种巧妙的方法可以将其转换为原始类型的数组?特别是可以做到这一点,而不必创建新的数组并遍历内容。因此,例如Integer[] array将其转换为最简洁的方法是什么int[] intArray不幸的是,在Hibernate和我们无法控制的某些第三方库之间进行接口连接时,这是我们经常要做的事情。看来这是一个很普通的操作,所以如果没有捷径,我会感到惊讶。谢谢你的帮助!
查看完整描述

3 回答

?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

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


查看完整回答
反对 回复 2019-12-03
?
繁花不似锦

TA贡献1851条经验 获得超4个赞

使用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。


查看完整回答
反对 回复 2019-12-03
?
慕妹3146593

TA贡献1820条经验 获得超9个赞

特别是可以做到这一点,而不必创建新的数组并遍历内容。


您无法在Java中将Integer数组转换为int(即,您无法更改数组元素的类型)。因此,您必须创建一个新的int []数组并将Integer对象的值复制到其中,或者可以使用适配器:


class IntAdapter {

    private Integer[] array;

    public IntAdapter (Integer[] array) { this.array = array; }

    public int get (int index) { return array[index].intValue(); }

}

这可以使您的代码更具可读性,并且IntAdapter对象将只消耗几个字节的内存。适配器的最大优点是您可以在这里处理特殊情况:


class IntAdapter {

    private Integer[] array;

    public int nullValue = 0;

    public IntAdapter (Integer[] array) { this.array = array; }

    public int get (int index) { 

        return array[index] == null ? nullValue : array[index].intValue();

    }

}

另一个解决方案是使用Commons Primitives,它包含许多预定义的适配器。在您的情况下,请查看ListIntList。


查看完整回答
反对 回复 2019-12-03
  • 3 回答
  • 0 关注
  • 336 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信