当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《将对象数组转换为其基本类型的数组》经验,为你挑选了4个好方法。

如果您有一个具有基本类型的Java对象数组(例如Byte,Integer,Char等).有没有一种简洁的方法我可以将它转换为原始类型的数组?特别是可以在不必创建新数组并遍历内容的情况下完成此操作.

例如,给定

Integer[] array

什么是将其转换为最佳方式

int[] intArray

不幸的是,当Hibernate与我们无法控制的某些第三方库之间进行交互时,我们必须经常这样做.这似乎是一个非常常见的操作,所以如果没有捷径我会感到惊讶.

谢谢你的帮助!



1> Guillaume..:

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



2> Alex..:

使用Java 8中引入的流可以完成:

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

但是,目前只有原始流int,longdouble.如果您需要转换为另一种原始类型,例如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.


而不是`Integer :: intValue`,你也可以使用`i - > i`(使用拆箱).

3> Zach Scriven..:

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


关于空值的好点.出于我的目的,如果其中一个条目为null,我将接受抛出异常,就像在取消对象对象时抛出NullPointerException一样.
对于Java 8,这个答案已不再准确,请参阅[Alex的回答](http://stackoverflow.com/a/24720136/305973).

4> Paul Bellora..:

使用番石榴:

int[] intArray = Ints.toArray(Arrays.asList(array));

文档:

Arrays.asList (核心API)

Ints.toArray (番石榴)

推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有