tags:

views:

153

answers:

4

Is there a way, to convert a List of Integers to Array of ints (not integer). Something like List to int []? Without looping through the list and manually converting the intger to int.

+1  A: 

No :)

You need to iterate through the list. It shouldn't be too painful.

davmac
+1  A: 

I'm sure you can find something in a third-party library, but I don't believe there's anything built into the Java standard libraries.

I suggest you just write a utility function to do it, unless you need lots of similar functionality (in which case it would be worth finding the relevant 3rd party library). Note that you'll need to work out what to do with a null reference in the list, which clearly can't be represented accurately in the int array.

Jon Skeet
+10  A: 

You can use the toArray to get an array of Integers, ArrayUtils from the apache commons to convert it to an int[].


List<Integer> integerList = new ArrayList<Integer>();
Integer[] integerArray = integerList.toArray(new Integer[0]);
int[] intArray = ArrayUtils.toPrimitive(integerArray);

Resources :

On the same topic :

Colin Hebert
+1, was about to post the same. :-)
missingfaktor
There is a typo, it should be `ArrayUtils`.
gpeche
You're right, thanks.
Colin Hebert
To make it safe you need to remove all null elements from the list before calling `toArray()`
seanizer
A: 

Here is a utility method that converts a Collection of Integers to an array of ints. If the input is null, null is returned. If the input contains any null values, a defensive copy is created, stripping all null values from it. The original collection is left unchanged.

public static int[] toIntArray(final Collection<Integer> data){
    int[] result;
    // null result for null input
    if(data == null){
        result = null;
    // empty array for empty collection
    } else if(data.isEmpty()){
        result = new int[0];
    } else{
        final Collection<Integer> effective;
        // if data contains null make defensive copy
        // and remove null values
        if(data.contains(null)){
            effective = new ArrayList<Integer>(data);
            while(effective.remove(null)){}
        // otherwise use original collection
        }else{
            effective = data;
        }
        result = new int[effective.size()];
        int offset = 0;
        // store values
        for(final Integer i : effective){
            result[offset++] = i.intValue();
        }
    }
    return result;
}
seanizer