转换列表的最佳方式是什么<;长期>;对象到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();