2010-09-14 9 views
12

¿Hay alguna manera de convertir una lista de enteros en una matriz de enteros (no enteros)? Algo como List to int []? Sin pasar por la lista y convertir manualmente el intger a int.Conversión de la lista de enteros a la matriz int

+0

¿Cuál es el problema con el ciclo aquí? –

Respuesta

3

Estoy seguro de que puede encontrar algo en una biblioteca de terceros, pero no creo que haya nada integrado en las bibliotecas estándar de Java.

Le sugiero que solo escriba una función de utilidad para hacerlo, a menos que necesite muchas funcionalidades similares (en cuyo caso, valdría la pena encontrar la biblioteca de terceros correspondiente). Tenga en cuenta que deberá averiguar qué hacer con una referencia nula en la lista, que claramente no se puede representar con precisión en la matriz int.

+1

@Downvoter: ¿me gustaría comentar? –

1

No :)

Necesita iterar por la lista. No debería ser muy doloroso.

40

Puede utilizar el toArray para obtener una matriz de Integers, ArrayUtils de los bienes comunes de Apache para convertirlo en un int[].


List<Integer> integerList = new ArrayList<Integer>(); 
Integer[] integerArray = integerList.toArray(new Integer[0]); 
int[] intArray = ArrayUtils.toPrimitive(integerArray); 

Recursos:

Sobre el mismo tema:

+0

+1, estaba a punto de publicar lo mismo. :-) – missingfaktor

+0

Hay un error tipográfico, debería ser 'ArrayUtils'. – gpeche

+0

Tienes razón, gracias. –

1

Aquí es un método de utilidad que convierte una colección de enteros en una matriz de enteros. Si la entrada es nula, se devuelve null. Si la entrada contiene valores nulos, se crea una copia defensiva, quitándole todos los valores nulos. La colección original no se modifica.

public static int[] toIntArray(final Collection<Integer> data){ 
    int[] result; 
    // null result for null input 
    if(data == null){ 
     result = null; 
    // empty array for empty collection 
    } else if(data.isEmpty()){ 
     result = new int[0]; 
    } else{ 
     final Collection<Integer> effective; 
     // if data contains null make defensive copy 
     // and remove null values 
     if(data.contains(null)){ 
      effective = new ArrayList<Integer>(data); 
      while(effective.remove(null)){} 
     // otherwise use original collection 
     }else{ 
      effective = data; 
     } 
     result = new int[effective.size()]; 
     int offset = 0; 
     // store values 
     for(final Integer i : effective){ 
      result[offset++] = i.intValue(); 
     } 
    } 
    return result; 
} 

Actualización:Guava tiene una sola línea para esta funcionalidad:

int[] array = Ints.toArray(data); 

Referencia:

-3
List<Integer> listInt = new ArrayList<Integer>(); 

    StringBuffer strBuffer = new StringBuffer(); 

    for(Object o:listInt){ 
     strBuffer.append(o); 
    } 

    int [] arrayInt = new int[]{Integer.parseInt(strBuffer.toString())}; 

Creo que esto debería resolver su problema

Cuestiones relacionadas