转换列表的最佳方式是什么<;长期>;对象到java中的长[]数组?
是否有任何实用方法可以将数字类型列表转换为基元类型数组? 换句话说,我正在寻找比这更好的解决方案转换列表的最佳方式是什么<;长期>;对象到java中的长[]数组?,java,collections,Java,Collections,是否有任何实用方法可以将数字类型列表转换为基元类型数组? 换句话说,我正在寻找比这更好的解决方案 private long[] toArray(List<Long> values) { long[] result = new long[values.size()]; int i = 0; for (Long l : values) result[i++] = l; return result; } private long[]toAr
private long[] toArray(List<Long> values) {
long[] result = new long[values.size()];
int i = 0;
for (Long l : values)
result[i++] = l;
return result;
}
private long[]toArray(列表值){
long[]结果=新的long[values.size()];
int i=0;
用于(长l:值)
结果[i++]=l;
返回结果;
}
:
long[] result = Longs.toArray(values);
使用ArrayUtils.toPrimitive(长[]数组)
from
我不记得有什么本机方法可以做到这一点,但创建一个自我方法有什么错;-)
public类可用性{
publicstaticlong[]toArray(迭代器自Java 8以来,您可以执行以下操作:
long[] result = values.stream().mapToLong(l -> l).toArray();
这里发生了什么事
我们将列表
转换为流
我们呼吁它获得长流
mapToLong
的参数是a,其结果类型为long
- 因为Java会自动将
Long
解封为Long
,在lambda表达式工作时写入l->l
。Long
在那里被转换为Long
。我们也可以更明确地使用Long::longValue
我们调用,它返回一个long[]
查看您想要的解决方案不要忘记l.longValue();
@Vash:longValue()
是不必要的,因为存在自动装箱。您可能需要指定您想要返回的long
数组:值。toArray(新长[0])
@Gary Buyn:你不能使用基元类型作为泛型参数。我不知道为什么你会得到4张赞成票,但这段代码甚至不会编译,你不能从Object[]转换到long[]。是的,我一发布它就意识到了。如果使用gradle(像android一样)使用dependency编译“org.apache.commons:commons-lang3:3.4”
(更改为最新版本)以添加Apache Commons库(及其类ArrayUtils
)。您能解释一下这里发生了什么吗?@VaidAbhishek Done:)。我尝试用您的示例返回Long[],但调用Array时它仍然返回Long[]。您能给出一个完整的方法调用以返回Long[]@MoayadAbuJaber您想要Long吗[]
相反?这只是值。toArray(新的Long[0])
在Android中,此调用需要最低API级别24,因此如果您的目标是较低级别,则不能使用此级别。
public class YasinUtilities {
public static long[] toArray(Iterator<Long) values) { //Better choice would be Enumerator but easier is this way.
if(value == null) {
//return null or throw exception
}
long[] result = new long[values.size()];
Long current = null;
int i = 0;
while(values.hasNext()) {
current = values.next();
if(current == null) {
result[i++] = 0L; //or -1;
} else {
result[i++] = current.longValue();
}
}
}
}
long[] result = values.stream().mapToLong(l -> l).toArray();