将 Long[] 转换为 long[](原始类型)java。

28

我如何将Long[]转换为long[]?例如,如果不是数组,则知道如何进行转换,代码如下。

long ll = (Long)Object[1].longValue()

但是如何将下面的内容转换为数组呢?以下方式不正确,有没有人可以进行修正?

long[] l_ar = (Long[])Object[]  

1
你需要这样做的原因是什么?使用long[]而不是Long[]最常见的原因是为了节省空间和提高性能。如果你已经有了Long[],那么你想要做什么呢?或者你只是好奇吗? - Falmarri
@Falmarri:一个用途是,如果你有一个 Long[],但你要将它传递给一些期望 long[] 的函数。 - cHao
1
@cHao:没错。根据我的经验,这种情况并不经常发生,所以我只是好奇问一下楼主的情况是什么。 - Falmarri
4个回答

45

你可以借鉴使用基于ArrayUtils的解决方案。

Long[] longObjects = { 1L, 2L, 3L };
long[] longArray = ArrayUtils.toPrimitive(longObjects);

1
类的链接:ArrayUtils.toPrimitive - Josue Abarca

21

没有标准的API方法可以做到这一点(如果是null元素,该如何处理?),因此您需要自己创建这样的方法。

类似于以下代码(在任何对象为null时将抛出NullPointerException

public static long[] toPrimitives(Long... objects) {

    long[] primitives = new long[objects.length];
    for (int i = 0; i < objects.length; i++)
         primitives[i] = objects[i];

    return primitives;
}

14

使用Java 8流:

public static long[] unboxed(final Long[] array) {
    return Arrays.stream(array)
                 .filter(Objects::nonNull)
                 .mapToLong(Long::longValue)
                 .toArray();
}

3
为了实现此目的,最好的方法是遍历每个数组。
例如,将Long[]转换为long[]:
Long[] objLong = new Long[10];
//fill objLong with some values
long[] primLong = new long[objLong.length]

for(int index = 0; index < objLong.length; index++)
{
    primLong[index] = objLong[index];
}

由于自动拆箱,这应该可以通过将Long转换为long来解决。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接