java将UnmodifiableRandomAccessList转换为Array

时间:2017-07-29 06:48:10

标签: java java-8

我有ArrayList collection个元素 - [10, 20, 30]

当我使用

(collection).toArray(new Integer[0])

一切正常。

但有时我必须将UnmodifiableRandomAccessList collection转换为数组。

enter image description here

所以当我使用相同的代码时:

(collection).toArray(new Integer[0])

我收到一个例外:

java.lang.ArrayStoreException
    at java.util.ArrayList.toArray(ArrayList.java:407)
    at java.util.Collections$UnmodifiableCollection.toArray(Collections.java:1034)

在这种情况下如何正确转换收藏?是否存在任何集合类型不可知toArray()方法实现(例如在Apache commons中)?

2 个答案:

答案 0 :(得分:2)

抛出此异常表示已尝试将错误类型的对象存储到对象数组中。例如,以下代码生成ArrayStoreException:

     Object x[] = new String[3];
     x[0] = new Integer(0);

https://docs.oracle.com/javase/7/docs/api/java/lang/ArrayStoreException.html

答案 1 :(得分:1)

您始终可以通过Stream将任何类型的集合转换为数组。

Integer[] intArray = collection.stream().toArray(Integer[]::new);