2010-09-14 12 views
12

Czy istnieje sposób konwertowania listy liczb całkowitych do tablicy int (nie jest liczbą całkowitą). Coś jak List do int []? Bez przechodzenia przez listę i ręcznego przekształcania intgera w int.Konwertuj listę całkowitą do tablicy int

+0

Na czym polega problem z pętlą? –

Odpowiedz

3

Jestem pewien, że możesz znaleźć coś w bibliotece innej firmy, ale nie wierzę, że jest coś wbudowanego w standardowe biblioteki Java.

Proponuję po prostu napisać funkcję narzędzia, aby to zrobić, chyba że potrzebujesz dużo podobnej funkcjonalności (w takim przypadku warto byłoby znaleźć odpowiednią bibliotekę 3rd party). Zauważ, że będziesz musiał sprawdzić, co zrobić z pustym odwołaniem na liście, które wyraźnie nie może być dokładnie odwzorowane w tablicy int.

+1

@Dvvoter: Chcesz się skomentować? –

1

Nie :)

Musisz powtórzyć listę. To nie powinno być zbyt bolesne.

40

Można użyć toArray aby uzyskać tablicę Integers, ArrayUtils od commons apache, aby przekształcić go do int[].


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

Zasoby:

na ten sam temat:

+0

+1, zamierzał opublikować to samo. :-) – missingfaktor

+0

Jest literówka, powinna to być 'ArrayUtils'. – gpeche

+0

Masz rację, dzięki. –

1

Oto metoda narzędzie, które konwertuje zbiór liczb całkowitych do tablicy int. Jeśli dane wejściowe mają wartość null, zwracana jest wartość null. Jeśli dane wejściowe zawierają dowolne wartości puste, tworzona jest kopia obronna, usuwając z niej wszystkie wartości puste. Oryginalna kolekcja pozostała niezmieniona.

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; 
} 

Aktualizacja:Guava ma jedną wkładkę dla tej funkcji:

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

referencyjny:

-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())}; 

Myślę, że to powinno rozwiązać twój problem.