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(CollectionLong
和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
}