How can I convert a Java HashSet<Integer> to a primitive int array?
I've got a HashSet<Integer>
with a bunch of Integers
in it. I want to turn it into an array, but calling
hashset.toArray();
returns an Object[]
. Is there a better way to cast it to an array of int
other than iterating through every element manually? I want to pass the array to
void doSomething(int[] arr)
which won't accept the Object[] array, even if I try casting it like
doSomething((int[]) hashSet.toArray());
You can create an int[]
from any Collection<Integer>
(including a HashSet<Integer>
) using Java 8 streams:
int[] array = coll.stream().mapToInt(Number::intValue).toArray();
The library is still iterating over the collection (or other stream source) on your behalf, of course.
In addition to being concise and having no external library dependencies, streams also let you go parallel if you have a really big collection to copy.
Apache's ArrayUtils has this (it still iterates behind the scenes):
doSomething(ArrayUtils.toPrimitive(hashset.toArray()));
They're always a good place to check for things like this.
You can convert a Set<Integer>
to Integer[]
even without Apache Utils:
Set<Integer> myset = new HashSet<Integer>();
Integer[] array = myset.toArray(new Integer[0]);
However, if you need int[]
you have to iterate over the set.
public int[] toInt(Set<Integer> set) {
int[] a = new int[set.size()];
int i = 0;
for (Integer val : set) a[i++] = val;
return a;
}
Now that I wrote the code for you it's not that manual anymore, is it? ;)