【问题标题】:Convert ArrayList of Integer Objects to an int array? [duplicate]将整数对象的 ArrayList 转换为 int 数组? [复制]
【发布时间】:2012-10-17 10:18:24
【问题描述】:

可能重复:
How to convert an ArrayList containing Integers to primitive int array?

我尝试了下面的代码,但它不起作用。我是否必须循环将ArrayList 复制到数组中?

int[]intArray = (int[]) integerArrayList.toArray();

【问题讨论】:

  • 使用流:nums.stream().mapToInt(x -> x).toArray();

标签: java arrays arraylist


【解决方案1】:

如果你想要 primitive 类型的数组,你可以使用Apache Commons ArrayUtils#toPrimitive 方法从包装数组中获取原始数组:-

public static int[] toPrimitive(Integer[] array)

你可以这样使用它:-

int[] arr = ArrayUtils.toPrimitive((Integer[])integerArrayList.toArray());

或者,您可以使用 toArray 方法的 1-arg 版本,它采用 array 并仅返回该类型的数组.这样,您就不必进行类型转换

List<Integer> myList = new ArrayList<Integer>();
Integer[] wrapperArr = myList.toArray(new Integer[myList.size()]);

// If you want a `primitive` type array
int[] arr = ArrayUtils.toPrimitive(wrapperArr);

但是,如果您对wrapper type 数组表示满意(这肯定不会给您带来麻烦),那么您不需要执行最后一步。


此外,您还可以创建 原始 数组,而无需创建中间 包装器类型 数组。为此,您必须通过loop 写它:-

int[] arr = new int[myList.size()];

for(int i = 0; i < myList.size(); i++) {
    if (myList.get(i) != null) {
        arr[i] = myList.get(i);
    }
}

【讨论】:

  • It does the same。循环数组并创建新的原始数组。而且为这样一个简单的功能添加另一个库是没有意义的。
  • @AmitD。至少让我们免于编写那个循环来完成工作。
【解决方案2】:

您需要遍历并复制它。

int[] intArray = new int[integerArrayList.size()];
for (int i = 0; i < intArray.length; i++) {
    intArray[i] = integerArrayList.get(i);
}

【讨论】:

    【解决方案3】:

    您不需要循环,也不需要类型转换为int。只需将int 的声明更改为Integer。如果需要,其他代码将使用自动拆箱到int 元素。

    autoboxing

    // List adapter for primitive int array
    public static List<Integer> asList(final int[] a) {
        return new AbstractList<Integer>() {
            public Integer get(int i) { return a[i]; }
            // Throws NullPointerException if val == null
            public Integer set(int i, Integer val) {
                Integer oldVal = a[i];
                a[i] = val;
                return oldVal;
            }
            public int size() { return a.length; }
        };
    

    }

    【讨论】:

      【解决方案4】:

      您应该使用 arraylist 的 toArray(T[] arr) 方法而不是 arrayList 的 toArray() 没有参数。 参考那个方法签名here

      如下所示:

         ArrayList<Integer> al = new ArrayList<>();
              al.add(2);
              al.add(3);
              Integer[] arr = al.toArray(new Integer[al.size()]);
              System.out.println(arr.length);//returns 2
      

      【讨论】:

      • 这是不正确的,因为他希望创建一个原始 int 数组,而不是另一个 Integer 数组。
      猜你喜欢
      • 2011-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-17
      • 2017-10-18
      • 2013-02-21
      • 2019-01-09
      相关资源
      最近更新 更多