Преобразование списка в массив. 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 (не делайте то, что вызывает автобоксинг/распаковку), вы должны быть в порядке.
В противном случае вам просто нужно вручную удалить все нули из вашего списка, прежде чем превращать его в массив