54

How I can do that?

I have an arraylist, with float elements. (Arraylist <Float>)

(float[]) Floats_arraylist.toArray()

it is not working.

cannot cast from Object[] to float[]

3

3 Answers 3

44

Loop over it yourself.

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

The nullcheck is mandatory to avoid NullPointerException because a Float (an object) can be null while a float (a primitive) cannot be null at all.

In case you're on Java 8 already and it's no problem to end up with double[] instead of float[], consider Stream#mapToDouble() (no there's no such method as mapToFloat()).

List<Float> floatList = getItSomehow();
double[] doubleArray = floatList.stream()
    .mapToDouble(f -> f != null ? f : Float.NaN) // Or whatever default you want.
    .toArray();
Sign up to request clarification or add additional context in comments.

2 Comments

Such a bummer. That used to be so easy in C#.
In days like this I hate Java.
36

You can use Apache Commons ArrayUtils.toPrimitive():

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

2 Comments

Link above is broken. I used the following import: import org.apache.commons.lang3.ArrayUtils;
list.toArray(...) will create an intermediate array... while the simple loop over the list won't.
5

Apache Commons Lang to the rescue.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.