2011-01-29 14 views
33

Jak mogę to zrobić?Konwersja Java Arraylist <Float> na float []

Mam listę tablic, z elementami pływającymi. (Arraylist <Float>)

(float[]) Floats_arraylist.toArray() 

to nie działa.

nie może rzucać z Object [] float []

+1

Odwrotność tego: http://stackoverflow.com/questions/2585907/is-there-a-native-java-method-to-box- tablica –

+0

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

+0

Inny typ pierwotny, ale w zasadzie to samo pytanie: [Tworzenie bajta \ [\] z listy ] (http://stackoverflow.com/questions/1565483/creating-a-byte-from-a-listbyte) – finnw

Odpowiedz

34

pętli nad nim sam.

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

nullcheck jest konieczne w celu uniknięcia NullPointerException ponieważ Float (obiekt) może być null podczas float (pierwotną), nie mogą być w ogóle null.

W przypadku jesteś na Java 8 i już nie ma problemu, aby skończyć z double[] zamiast float[] rozważyć Stream#mapToDouble() (no nie ma takiej metody, jak mapToFloat()).

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

Taki bummer. To było takie łatwe w języku C#. – PawelP

+1

W dni takie jak to nienawidzę Java. –

25

Można użyć Apache Commons ArrayUtils.toPrimitive():

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