我试图用下面的代码段将包含整数对象的数组列表转换为原始int[],但它抛出编译时错误。可以在Java中转换吗?

List<Integer> x =  new ArrayList<Integer>();
int[] n = (int[])x.toArray(int[x.size()]);

当前回答

这个代码段是为我工作,试试这个:

Integer[] arr = x.toArray(new Integer[x.size()]);

值得一提的是,数组列表应该这样声明:

ArrayList<Integer> list = new ArrayList<>();

其他回答

如果您正在使用Eclipse Collections,您可以使用collectInt()方法从对象容器切换到原始int容器。

List<Integer> integers = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));
MutableIntList intList =
  ListAdapter.adapt(integers).collectInt(i -> i);
Assert.assertArrayEquals(new int[]{1, 2, 3, 4, 5}, intList.toArray());

如果可以将数组列表转换为FastList,就可以摆脱适配器。

Assert.assertArrayEquals(
  new int[]{1, 2, 3, 4, 5},
  Lists.mutable.with(1, 2, 3, 4, 5)
    .collectInt(i -> i).toArray());

注意:我是Eclipse集合的提交者。

Integer[] arr = (Integer[]) x.toArray(new Integer[x.size()]);

像正常int[]一样访问arr。

这个代码段是为我工作,试试这个:

Integer[] arr = x.toArray(new Integer[x.size()]);

值得一提的是,数组列表应该这样声明:

ArrayList<Integer> list = new ArrayList<>();

让我困惑的是,当一个完美的、使用良好的库(如Apache Commons)已经解决了问题时,我们却鼓励一次性的自定义方法。尽管解决方案是微不足道的,但由于长期维护和可访问性,鼓励这种行为是不负责任的。

使用Apache Commons即可

使用Dollar应该非常简单:

List<Integer> list = $(5).toList(); // the list 0, 1, 2, 3, 4  
int[] array = $($(list).toArray()).toIntArray();

我计划改进DSL,以删除中间的toArray()调用