3 回答

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。

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。
添加回答
举报