2012-01-13 9 views
15

Hay una lista:Convertir lista en matriz. Java.Lang.ArraystoreException

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

Contiene una entrada sigle, pero podría contener varias entradas:

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

Necesito convertir esta lista en la matriz Integer[][], pero la conversión falla debido a valores nulos:

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

¿Cómo solucionar este problema?

Edición # 1

Necesito llegar:

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

Cómo se puede tener una lista 2D ('myList = [[2, null, 1, null, null, 3,6,1,1]] ') cuando su 'myList' se declara que es solo una lista de enteros? – adarshr

+0

Sí, lo siento. Mi culpa. Debería haber List . –

+1

Re Edit # 1, ¿Es una matriz 1D? –

Respuesta

10

probar este (suponiendo que tiene en realidad el List<Integer[]> que hablaron en su comentario):

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 convierte una lista de matrices en una matriz, obtendrá una matriz bidimensional y, por lo tanto, su parámetro también debería ser uno.

1

Si usted tiene un

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

con una sola matriz en él, usted puede hacer

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

null nunca causa una excepción ArrayStoreException para new Integer[]

1

¿Estás seguro de que eso es lo que estás haciendo? He intentado este código y funciona 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); 
     } 

Mostrando "2, null, 1".

Sin embargo, si en el "bucle for" cambio "Integer i" a "int i", el autoboxing falla con una NullPointerException en el elemento nulo.

Siempre que haga una matriz en objetos enteros (no en primitivas) y trate los elementos de esa matriz como objetos enteros (no haga algo que activará un autoboxing/unboxing), debería estar bien.

De lo contrario, sólo hay que quitar manualmente todos los valores nulos de su lista antes de entregarlo a un array

2

Obras para mí

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)); 
Cuestiones relacionadas