如何在 Java 中将 Integer[] 转换为 int[] 数组?
Posted
技术标签:
【中文标题】如何在 Java 中将 Integer[] 转换为 int[] 数组?【英文标题】:How to convert Integer[] to int[] array in Java? 【发布时间】:2015-10-02 09:17:34 【问题描述】:有没有一种奇特的方法可以将 Integer 数组转换为 int 数组? (我不想遍历每个元素;我正在寻找一种优雅而快速的方式来编写它)
我正在使用另一种方式
scaleTests.add(Arrays.stream(data).boxed().toArray(Double[]::new));
我正在寻找单线但找不到东西。
目标是:
int[] valuesPrimitives = <somehow cast> Integer[] valuesWrapper
【问题讨论】:
实际的问题是:你为什么要这样做?损害已经造成(您已经创建了所有Double
对象并付出了更高的执行时间和更高的内存使用量)。
不,你不能投射它,因为 Double[]
不是 double[]
。幕后会有一个迭代。单行可能是:double[] valuesPrimitives = Stream.of(valuesWrapper).mapToDouble(d -> d).toArray();
***.com/questions/564392/…
@JavaHopper 我想你误解了我的意思。我明白为什么人们想要一个简短而优雅的转换解决方案。我不明白为什么要进行实际转换。您可以简单地使用Double[]
而不是double[]
。
@Turing85 适应国外 API 是一个常见的案例。
【参考方案1】:
您可以使用 Java 8 的 Stream API
int[] intArray = Arrays.stream(array).mapToInt(Integer::intValue).toArray();
【讨论】:
有时候我更喜欢看mapToInt(i -> i)
。【参考方案2】:
如果您可以考虑使用Apache commons ArrayUtils,那么有一个简单的toPrimitive API:
public static double[] toPrimitive(Double[] array, double valueForNull)
将对象 Doubles 数组转换为处理 null 的基元。
此方法为空输入数组返回空值。
【讨论】:
您好,感谢您的回答。不幸的是我忘了提到我不能使用 ArrayUtils。不过还是谢谢【参考方案3】:使用 Guava,您可以执行以下操作:
int[] intArray = Ints.toArray(intList);
如果您使用的是 Maven,请添加此依赖项:
<dependency>
<groudId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>18.0</version>
</dependency>
【讨论】:
【参考方案4】:如果您可以访问 Apache 语言库,那么您可以像这样使用 ArrayUtils.toPrimitive(Integer[]) 方法:
int[] primitiveArray = ArrayUtils.toPrimitive(objectArray);
【讨论】:
【参考方案5】:您可以下载提供ArrayUtils
类的org.apache.commons.lang3
jar 文件。
使用以下代码行将解决问题:
ArrayUtils.toPrimitive(Integer[] nonPrimitive)
其中nonPrimitive
是要转换为int[]
的Integer[]
。
【讨论】:
以上是关于如何在 Java 中将 Integer[] 转换为 int[] 数组?的主要内容,如果未能解决你的问题,请参考以下文章
在 Java 中将 int 的原始数组转换为 ArrayList:“java.lang.ClassCastException:[我无法转换为 java.lang.Integer”