在Java中将List <Long>对象转换为long []数组的最佳方法是什么?

问题描述

| 是否有任何实用方法数值类型列表转换为原始类型数组? 换句话说,我正在寻找比这更好的解决方案。
private long[] toArray(List<Long> values) {
    long[] result = new long[values.size()];
    int i = 0;
    for (Long l : values)
        result[i++] = l;
    return result;
}
    

解决方法

        从Java 8开始,您可以执行以下操作:
long[] result = values.stream().mapToLong(l -> l).toArray();
这里发生了什么事? 我们将
List<Long>
转换为
Stream<Long>
。 我们叫ѭ4to得到to5 a
mapToLong
的参数是a7ѭ,其结果类型为
long
。 因为Java会自动将ѭ9取消装箱到ѭ8,所以将ѭ11编写为lambda表达式是可行的。
Long
在那里转换为to8ѭ。我们也可以更明确一些,使用
Long::longValue
代替。 我们称
toArray
,它返回returns16ѭ     ,        Google Guava:Longs.toArray(Collection)
long[] result = Longs.toArray(values);
    ,        使用来自Apache Commons的
ArrayUtils.toPrimitive(Long[] array)
Long[] l = values.toArray(new Long[values.size()]);
long[] l = ArrayUtils.toPrimitive(l);
    ,        我不记得有什么本地方法可以做到这一点,但是创建一个self-;)是怎么回事。
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();
       }
      }
   } 
}