2011-01-29 24 views
33

¿Cómo puedo hacer eso?Java convert Arraylist <Float> para flotar []

Tengo un arraylist, con elementos flotantes. (Arraylist <Float>)

(float[]) Floats_arraylist.toArray() 

no funciona.

no puede lanzar desde Object [] para flotar []

+1

La inversa de esta: http://stackoverflow.com/questions/2585907/is-there-a-native-java-method-to-box- an-array –

+0

'int s = list.size(); float [] a = nuevo float [s]; for (int i = 0; i bestsss

+0

Diferente tipo primitivo, pero esencialmente la misma pregunta: [Creando un byte \ [\] de una lista ] (http://stackoverflow.com/questions/1565483/creating-a-byte-from-a-listbyte) – finnw

Respuesta

34

bucle sobre sí mismo.

List<Float> floatList = getItSomehow(); 
float[] floatArray = new float[floatList.size()]; 
int i = 0; 

for (Float f : floatList) { 
    floatArray[i++] = (f != null ? f : Float.NaN); // Or whatever default you want. 
} 

El nullcheck es obligatoria para evitar NullPointerException porque una (un objeto) Float puede ser null mientras que un float (una primitiva) no puede ser null en absoluto.

En caso de que esté en Java 8 ya y no hay ningún problema para terminar con double[] en lugar de float[], considere Stream#mapToDouble() (sin no hay tal método mapToFloat()).

List<Float> floatList = getItSomehow(); 
double[] doubleArray = floatList.stream() 
    .mapToDouble(f -> f != null ? f : Float.NaN) // Or whatever default you want. 
    .toArray(); 
+8

Tal fastidio. Eso solía ser tan fácil en C#. – PawelP

+1

En días como este, odio Java. –

25

Puede utilizar Apache Commons ArrayUtils.toPrimitive():

List<Float> list = new ArrayList<Float>(); 
float[] floatArray = ArrayUtils.toPrimitive(list.toArray(new Float[0]), 0.0F);