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

是否有任何实用方法将数值类型列表转换为基本类型数组? 换句话说,我正在寻找比这更好的解决方案。

private long[] toArray(List 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(); 

这里发生了什么事?

  1. 我们将List转换为Stream
  2. 我们在其上调用mapToLong来获取LongStream
    • mapToLong的参数是ToLongFunction ,其结果类型为long
    • 因为Java自动将Longlong ,所以在lambda表达式工作时写l -> lLong在那里被转换为很long 。 我们也可以更明确地使用Long::longValue
  3. 我们调用toArray ,返回long[]

谷歌番石榴Longs.toArray(collections)

 long[] result = Longs.toArray(values); 

使用Apache Commons中的 ArrayUtils.toPrimitive(Long[] array)

 Long[] l = values.toArray(new Long[values.size()]); long[] l = ArrayUtils.toPrimitive(l); 

我不记得有些本机方法可以做到这一点,但创建一个自我的方法有什么问题;-)。

 public class YasinUtilities { public static long[] toArray(Iterator