Java 投长[]到长[]

Java 投长[]到长[],java,android,Java,Android,可能重复: 我为Android制作了一个包,我正试图将数组列表(toArray给了我Long[])转换成Long[],有简单的方法吗 我知道我可以循环使用,但我想我正在寻找一个更优雅的解决方案。您可以使用Apache commons: 或者在谷歌的: 不幸的是,没有比循环更简单的方法了。是做相反的事,但想法是一样的 因为另一个答案建议使用Apache Commons,而您使用的是Android——如果我要添加一个额外的依赖项,我宁愿选择: 供参考的代码是: public static lo

可能重复:

我为Android制作了一个
,我正试图将
数组列表
(toArray给了我
Long[]
)转换成
Long[]
,有简单的方法吗


我知道我可以循环使用,但我想我正在寻找一个更优雅的解决方案。

您可以使用Apache commons:

或者在谷歌的:


不幸的是,没有比循环更简单的方法了。是做相反的事,但想法是一样的

因为另一个答案建议使用Apache Commons,而您使用的是Android——如果我要添加一个额外的依赖项,我宁愿选择:

供参考的代码是:

  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;
  }

public static long[]toArray(Collection
Long
Long
是不同的类型。
Long
是一个类。
Long
是一个基本类。
Long
引入java 5的自动装箱可能会让一些人感到困惑,因为
Long
Long
之间的双向转换是由编译器自动完成的。然而,这对java 5来说是不正确的。)rrays。这意味着您必须创建类型为
long
的新数组,并逐元素复制:

List<Long> list = new ArrayList<>();
// this way you create array of Long
Long[] arr1 = list.toArray(new Long[list.size()]);

// this way you create array of long
long[] arr2 = new long[list.size()];
int i = 0;
for (Long e : list) {
    arr2[i++] = e; // autoboxing does the job here
}
List List=new ArrayList();
//这样就可以创建长数组
Long[]arr1=list.toArray(新的Long[list.size()]);
//这样就可以创建长数组
long[]arr2=新的long[list.size()];
int i=0;
用于(长e:列表){
arr2[i++]=e;//自动装箱在这里完成工作
}

显然,您可以使用
System.arrcopy()
而不是自己编写循环。但是id没有任何区别。

很好,但我不会在我的项目中包含一个全新的jar,只是为了避免自己实现一个简单的循环。@Ridcully一旦包含它,你可能会发现自己在一次又一次地使用它。它充满了有用的、常见的(因此得名)方法,以减少繁琐的样板代码。感谢您的提示,但我同意Ridcully的观点,我尝试将APK保持尽可能小。您可以随时复制该特定方法,确保记录其来源(甚至保持包的org.apache…),毕竟它是apache许可的。然后如果(何时)你决定把所有的东西都包括进去,简单的切换:)那样的话,我宁愿推荐番石榴。
long[] primitive = Longs.toArray(listOfLongObjects);
  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;
  }
List<Long> list = new ArrayList<>();
// this way you create array of Long
Long[] arr1 = list.toArray(new Long[list.size()]);

// this way you create array of long
long[] arr2 = new long[list.size()];
int i = 0;
for (Long e : list) {
    arr2[i++] = e; // autoboxing does the job here
}