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

Yas*_*yar 30 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;
}
Run Code Online (Sandbox Code Playgroud)

rob*_*nst 45

从Java 8开始,您可以执行以下操作:

long[] result = values.stream().mapToLong(l -> l).toArray();
Run Code Online (Sandbox Code Playgroud)

这里发生了什么事?

  1. 我们把它转换List<Long>成了一个Stream<Long>.
  2. 我们呼吁mapToLong它得到一个LongStream
    • 参数mapToLong是a ToLongFunction,它有一个long结果类型.
    • 因为Java自动Long将a 打开到a long,所以写l -> l为lambda表达式.将Long被转换为long那里.我们也可以更明确地使用Long::longValue.
  3. 我们打电话toArray,返回一个long[]

  • @MoayadAbuJaber 你想要一个 `Long[]` 来代替?这只是 `values.toArray(new Long[0])` (2认同)

mel*_*iny 13

使用ArrayUtils.toPrimitive(Long[] array)来自Apache的百科全书.

Long[] l = values.toArray(new Long[values.size()]);
long[] l = ArrayUtils.toPrimitive(l);
Run Code Online (Sandbox Code Playgroud)

  • @Gary Buyn:你不能使用原始类型作为泛型参数. (3认同)
  • 你可能需要指定你想要一个`long`数组返回:`values.toArray(new long [0]);` (2认同)
  • 我不知道你为什么得到4票,但这段代码甚至不能编译你不能从Object []转换为long []. (2认同)