2011-07-28 13 views

Odpowiedz

5

Po wywołaniu ToArray() można przekazać wynik do metody Apache Commons ToPrimitive:

http://commons.apache.org/lang/api-2.4/org/apache/commons/lang/ArrayUtils.html#toPrimitive(java.lang.Byte[])>

+0

W tym celu nadal musiałbyś użyć 'doArray()' na liście wcześniej. – Marcelo

+1

Ta metoda pobiera tablicę jako parametr. Nie "ArrayList". Wymagałoby to konwersji z tablicy 'ArrayList'' na tablicę, a następnie konwersji tablicy' 'Byte'' na tablicę' 'byte''. Nie jestem pewien, czy byłby to najbardziej efektywny sposób na konwersję. –

+0

@Vivien Zgadzam się, że może nie być najbardziej efektywny, ale prawdopodobnie najprostszy do napisania. Jeśli wydajność jest problemem, użyłbym odpowiedzi Michaela lub Vivien. – JustinKSU

2
byte[] data = new byte[list.size()]; 
for (int i = 0; i < data.length; i++) { 
    data[i] = (byte) list.get(i); 
} 

Należy pamiętać, że może to zająć trochę czasu, ze względu na fakt, że Byte obiektów musi być konwertowane do byte wartości.

Ponadto, jeśli twoja lista zawiera wartości null, spowoduje to wyświetlenie NullPointerExcpetion.

8
byte[] result = new byte[list.size()]; 
for(int i = 0; i < list.size(); i++) { 
    result[i] = list.get(i).byteValue(); 
} 

Tak, kolekcje Java są irytujące, jeśli chodzi o prymitywnych typów .

+0

brakujące nawiasy w rozmiarze() – nick

4

Nie przychodzi na myśl żadna wbudowana metoda. Jednak kodowania jeden up jest dość prosta:

public static byte[] toByteArray(List<Byte> in) { 
    final int n = in.size(); 
    byte ret[] = new byte[n]; 
    for (int i = 0; i < n; i++) { 
     ret[i] = in.get(i); 
    } 
    return ret; 
} 

Zauważ, że to daje NullPointerException jeśli in jest null lub jeśli zawiera nulls. To całkiem oczywiste, jak zmienić tę funkcję, jeśli potrzebujesz innego zachowania.

Powiązane problemy