Преобразование списка в массив. java.lang.ArrayStoreException

Есть список:

List<Integer[]> myList = new ArrayList<Integer[]>();

Он содержит запись sigle, но может содержать несколько записей:

myList = [[2,null,1,null,null,3,6,1,1]]

Мне нужно преобразовать этот список в массив Integer[][], но преобразование завершилось неудачно из-за нулей:

Integer[] myArr = myList.toArray(new Integer[myList.size()]);

Как решить эту проблему?

Edit # 1

Мне нужно получить:

myArr = [2,null,1,null,null,3,6,1,1]

Ответы

Ответ 1

Попробуйте это (если вы действительно используете List<Integer[]>, о котором вы говорили в своем комментарии):

List<Integer[]> myList = new ArrayList<Integer[]>();
myList.add(new Integer[] {2,null,1,null,null,3,6,1,1} );

Integer[][] myArr = myList.toArray(new Integer[myList.size()][]);

Если вы преобразуете список массивов в массив, вы получите 2-мерный массив и, следовательно, ваш параметр тоже должен быть.

Ответ 2

Работает для меня

    List<Integer[]> myList = new ArrayList<Integer[]>();

    Integer[] ia = {2,null,1,null,null,3,6,1,1};

    myList.add(ia);

    Integer[][] iaa = myList.toArray(new Integer[myList.size()][]);

    System.out.println(Arrays.deepToString(iaa));

Ответ 3

Если у вас есть

List<Integer[]> myList = new ArrayList<Integer[]>();

только с одним массивом, вы можете сделать

Integer[] myArr = myList.get(0);

null никогда не вызывает исключение ArrayStoreException для new Integer[]

Ответ 4

Вы уверены, что делаете. Я пробовал этот код, и он отлично работает:

List<Integer> myList = new ArrayList<Integer>();
        myList.add(2);
        myList.add(null);
        myList.add(1);      
        Integer[] myArr = myList.toArray(new Integer[myList.size()]);

        for(Integer i:myArr) {
            System.out.println(i);
        }

Отображение "2, null, 1".

Однако, если в "for loop" я меняю "Integer i" на "int i", автобоксинг терпит неудачу с исключением NullPointerException на нулевом элементе.

Пока вы создаете массив объектов Integer (не int примитивов) и обрабатываете эти элементы массива как объекты Integer (не делайте то, что вызывает автобоксинг/распаковку), вы должны быть в порядке.

В противном случае вам просто нужно вручную удалить все нули из вашего списка, прежде чем превращать его в массив