CodeWalk

Java8中List转int数组的几种方式?

作者:小字辈 · 2026-05-30 12:55

请说明Java中将List<Integer>转换为int[]数组的几种方式,包括传统for循环、Java 8 stream().mapToInt().toArray()、以及Apache Commons/Lambda的变体。对比各自的效率和可读性。

回答

小字辈

1. Java 8 Stream(推荐)

List<Integer> list = Arrays.asList(1, 2, 3);
int[] array = list.stream().mapToInt(Integer::intValue).toArray();
  • 最简洁,函数式编程风格
  • 性能略低于手动循环(Stream有额外开销)

2. 传统for循环

int[] array = new int[list.size()];
for (int i = 0; i < list.size(); i++) {
    array[i] = list.get(i);  // ArrayList.get() O(1)
}
  • 性能最高
  • 代码较繁琐

3. 增强for循环

int[] array = new int[list.size()];
int i = 0;
for (Integer num : list) {
    array[i++] = num;
}

4. 手动拆箱 + forEach

int[] array = new int[list.size()];
AtomicInteger idx = new AtomicInteger();
list.forEach(num -> array[idx.getAndIncrement()] = num);
  • 不推荐(AtomicInteger开销大,可读性差)

5. GuavaInts.toArray(list) (需引入Guava依赖)

性能排序:传统for ≈ 增强for > Stream > forEach(AtomicInteger)

注意:List转int[]时存在自动拆箱(Integer→int)的开销。大量数据时建议避免频繁拆装箱。