Convertir la liste en tableau. Java.lang.ArrayStoreException
Il y a une liste:
List<Integer[]> myList = new ArrayList<Integer[]>();
Il contient une entrée sigle, mais peut contenir plusieurs entrées:
myList = [[2,null,1,null,null,3,6,1,1]]
J'ai besoin de convertir cette liste dans le tableau Integer[][]
, mais la conversion échoue en raison de nulls:
Integer[] myArr = myList.toArray(new Integer[myList.size()]);
Comment résoudre ce problème?
Modifier#1
J'ai besoin d'obtenir:
myArr = [2,null,1,null,null,3,6,1,1]
4 answers
Essayez ceci (en supposant que vous avez fait le List<Integer[]>
vous avez parlé dans votre commentaire):
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()][]);
Si vous convertissez une liste de tableaux en tableau, vous obtiendrez un tableau à 2 dimensions et donc votre paramètre devrait en être un aussi.
Fonctionne pour moi
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));
Si vous avez un
List<Integer[]> myList = new ArrayList<Integer[]>();
Avec un seul tableau, vous pouvez faire
Integer[] myArr = myList.get(0);
null
ne provoque jamais une ArrayStoreException pour un new Integer[]
Êtes-vous sûr que c'est ce que vous faites. J'ai essayé ce code et cela fonctionne bien:
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);
}
Affichant "2,null,1".
Cependant, si dans la boucle "for" je change "Integer i" en "int i", l'autoboxing échoue avec une exception NullPointerException sur l'élément null.
Tant que vous créez un tableau sur des objets entiers (pas des primitives int) et que vous traitez les éléments de ce tableau comme des objets entiers (ne faites pas quelque chose qui déclenchera un autoboxing/unboxing), tout devrait bien aller.
Sinon, il vous suffit de supprimer manuellement toutes les valeurs nulles de votre liste avant de la transformer en tableau