2010-07-04 24 views
26

Cercando di risolvere quello che dovrebbe essere un problema semplice. Ho una lista di byte, voglio convertirla alla fine di una funzione in una matrice di byte.Java: converte l'elenco di byte in serie di byte

final List<Byte> pdu = new ArrayList<Byte>(); 
.... 
return pdu.toArray(new byte[pdu.size()]);; 

compilatore non piace la sintassi sul mio toArray. Come risolvere questo?

risposta

40

Al compilatore non piace, perché byte[] non è Byte[].

Che cosa si può fare è utilizzare commons-lang s' ArrayUtils.toPrimitive(wrapperCollection):

Byte[] bytes = pdu.toArray(new Byte[pdu.size()]); 
return ArrayUtils.toPrimitive(bytes); 

Se non è possibile utilizzare commons-lang, è sufficiente scorrere la matrice e riempire un altro array di tipo byte[] con i valori (lo faranno essere automaticamente disattivato)

Se è possibile vivere con Byte[] anziché byte[] - lasciare in questo modo.

+0

Grazie mille! :) Non avevo mai visto ArrayUtils.toPrimitive, abbastanza utile. –

+1

+1 per quella roba di comunione-lingua –

+1

Non mi piace la soluzione di ArrayUtils. Ci deve essere una soluzione fuori dal comune per Java 8. – JohnMerlino

1

Prova anche Dollar (check this revision):

import static com.humaorie.dollar.Dollar.* 
... 

List<Byte> pdu = ...; 
byte[] bytes = $(pdu).convert().toByteArray();