如果您有一个具有基本类型的Java对象数组(例如Byte,Integer,Char等).有没有一种简洁的方法我可以将它转换为原始类型的数组?特别是可以在不必创建新数组并遍历内容的情况下完成此操作.
例如,给定
Integer[] array
什么是将其转换为最佳方式
int[] intArray
不幸的是,当Hibernate与我们无法控制的某些第三方库之间进行交互时,我们必须经常这样做.这似乎是一个非常常见的操作,所以如果没有捷径我会感到惊讶.
谢谢你的帮助!
Apache Commons Lang再次成为你的朋友.它们提供了ArrayUtils.toPrimitive(),它可以完全满足您的需求.您可以指定处理空值的方式.
使用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
.
不幸的是,Java平台中没有任何东西可以做到这一点.顺便说一下,你还需要显式处理数组中的null
元素Integer[]
(int
你将为这些元素使用什么?).
使用番石榴:
int[] intArray = Ints.toArray(Arrays.asList(array));
文档:
Arrays.asList
(核心API)
Ints.toArray
(番石榴)