施放长[]到长[]

Emi*_*yan 3 java android

可能重复:
将对象数组转换为其基本类型的数组

Parcel为Android 做了一个我试图通过转换它来打包ArrayList<Long>(toArray给我Long[])long[],有一个简单的方法来做到这一点吗?

我意识到我可以循环,但我想我正在寻找一个更优雅的解决方案.

Rei*_*eus 10

您可以使用Apache commons ArrayUtils:

long[] longArray = ArrayUtils.toPrimitive(longObjectArray);
Run Code Online (Sandbox Code Playgroud)

或者在Google的番石榴中:

long[] longArray = Longs.toArray(Arrays.asList(longObjectArray));
Run Code Online (Sandbox Code Playgroud)

  • @Ridcully一旦你加入它,你可能会发现自己一次又一次地使用它.它充满了有用的,*common*(因此名称)方法,减少了繁琐的样板代码量. (5认同)

ass*_*ias 6

不幸的是,没有比循环更简单的方法.这篇文章是关于做相反的事情,但想法是一样的......

由于另一个答案推荐Apache Commons并且你在Android上 - 如果我要包含一个额外的依赖项,我宁愿选择guava Longs实用程序类:

long[] primitive = Longs.toArray(listOfLongObjects);
Run Code Online (Sandbox Code Playgroud)

供参考,代码是:

  public static long[] toArray(Collection<? extends Number> collection) {
    if (collection instanceof LongArrayAsList) {
      return ((LongArrayAsList) collection).toLongArray();
    }

    Object[] boxedArray = collection.toArray();
    int len = boxedArray.length;
    long[] array = new long[len];
    for (int i = 0; i < len; i++) {
      // checkNotNull for GWT (do not optimize)
      array[i] = ((Number) checkNotNull(boxedArray[i])).longValue();
    }
    return array;
  }
Run Code Online (Sandbox Code Playgroud)