How to convert an ArrayList containing Integers to primitive int array? How to convert an ArrayList containing Integers to primitive int array? arrays arrays

How to convert an ArrayList containing Integers to primitive int array?


If you are using there's also another way to do this.

int[] arr = list.stream().mapToInt(i -> i).toArray();

What it does is:

  • getting a Stream<Integer> from the list
  • obtaining an IntStream by mapping each element to itself (identity function), unboxing the int value hold by each Integer object (done automatically since Java 5)
  • getting the array of int by calling toArray

You could also explicitly call intValue via a method reference, i.e:

int[] arr = list.stream().mapToInt(Integer::intValue).toArray();

It's also worth mentioning that you could get a NullPointerException if you have any null reference in the list. This could be easily avoided by adding a filtering condition to the stream pipeline like this:

                       //.filter(Objects::nonNull) also worksint[] arr = list.stream().filter(i -> i != null).mapToInt(i -> i).toArray();

Example:

List<Integer> list = Arrays.asList(1, 2, 3, 4);int[] arr = list.stream().mapToInt(i -> i).toArray(); //[1, 2, 3, 4]list.set(1, null); //[1, null, 3, 4]arr = list.stream().filter(i -> i != null).mapToInt(i -> i).toArray(); //[1, 3, 4]


You can convert, but I don't think there's anything built in to do it automatically:

public static int[] convertIntegers(List<Integer> integers){    int[] ret = new int[integers.size()];    for (int i=0; i < ret.length; i++)    {        ret[i] = integers.get(i).intValue();    }    return ret;}

(Note that this will throw a NullPointerException if either integers or any element within it is null.)

EDIT: As per comments, you may want to use the list iterator to avoid nasty costs with lists such as LinkedList:

public static int[] convertIntegers(List<Integer> integers){    int[] ret = new int[integers.size()];    Iterator<Integer> iterator = integers.iterator();    for (int i = 0; i < ret.length; i++)    {        ret[i] = iterator.next().intValue();    }    return ret;}


Google Guava

Google Guava provides a neat way to do this by calling Ints.toArray.

List<Integer> list = ...;int[] values = Ints.toArray(list);