Java8中List转int数组的几种方式?
请说明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. Guava:Ints.toArray(list) (需引入Guava依赖)
性能排序:传统for ≈ 增强for > Stream > forEach(AtomicInteger)
注意:List转int[]时存在自动拆箱(Integer→int)的开销。大量数据时建议避免频繁拆装箱。