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

前端 未结 18 1514
情书的邮戳
情书的邮戳 2020-11-22 11:23

I\'m trying to convert an ArrayList containing Integer objects to primitive int[] with the following piece of code, but it is throwing compile time error. Is it possible to

18条回答
  •  谎友^
    谎友^ (楼主)
    2020-11-22 11:34

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

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

    What it does is:

    • getting a Stream 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 works
    int[] arr = list.stream().filter(i -> i != null).mapToInt(i -> i).toArray();
    

    Example:

    List 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]
    

提交回复
热议问题