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]
Author: Mairbek Khadikov, 2012-01-13

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.

 10
Author: Thomas, 2012-01-13 10:42:14

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));
 2
Author: adarshr, 2012-01-13 10:43:50

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[]

 1
Author: Peter Lawrey, 2012-01-13 10:41:20

Ê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

 1
Author: Shivan Dragon, 2012-01-13 10:42:11