2011-01-29 19 views
33

मैं यह कैसे कर सकता हूं?जावा फ्लोट करने के लिए Arraylist <Float> परिवर्तित करें []

मेरे पास फ्लोट तत्वों के साथ एक सरणीसूची है। (Arraylist <Float>)

(float[]) Floats_arraylist.toArray() 

यह काम नहीं कर रहा है। [] इस पर फ्लोट करने के लिए

वस्तु से डाली नहीं कर सकते []

+1

इस का उल्टा: http://stackoverflow.com/questions/2585907/is-there-a-native-java-method-to-box- ए-एरे –

+0

'int s = list.size(); फ्लोट [] ए = नई फ्लोट [एस]; के लिए (int i = 0; i bestsss

+0

विभिन्न आदिम प्रकार, लेकिन अनिवार्य रूप से एक ही प्रश्न: [एक सूची से एक बाइट \ [\] बनाना] (http://stackoverflow.com/questions/1565483/creating-a-byte-from-a-listbyte) – finnw

उत्तर

34

लूप खुद।

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 NullPointerException से बचने के लिए अनिवार्य है, क्योंकि एक Float (एक वस्तु) null जबकि एक float (एक आदिम) हो सकता है null बिल्कुल नहीं हो सकता है।

मामले में आप पहले से ही जावा 8 पर हैं और यह, float[] के बजाय double[] अंत (mapToFloat() के रूप में कोई कोई ऐसे विधि) Stream#mapToDouble() विचार करने के लिए कोई समस्या नहीं है।

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

इस तरह का एक बमर। यह सी # में इतना आसान होता था। – PawelP

+1

इस तरह के दिनों में मैं जावा से नफरत करता हूं। –

25
अपाचे कॉमन्स

आप उपयोग कर सकते हैं ArrayUtils.toPrimitive():

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