Se você estiver usando java-8 também há outra maneira de fazer isso.
int[] arr = list.stream().mapToInt(i -> i).toArray();
O que ele faz é:
- recebendo um
Stream<Integer>
da lista
- obtendo um
IntStream
mapeando cada elemento para si mesmo (função de identidade), descompactando o int
valor retido por cada Integer
objeto (feito automaticamente desde o Java 5)
- obtendo a matriz
int
chamandotoArray
Você também pode chamar explicitamente intValue
através de uma referência de método, ou seja:
int[] arr = list.stream().mapToInt(Integer::intValue).toArray();
Também vale a pena mencionar que você pode obter um NullPointerException
se tiver alguma null
referência na lista. Isso pode ser facilmente evitado adicionando uma condição de filtragem ao pipeline de fluxo como este:
//.filter(Objects::nonNull) also works
int[] arr = list.stream().filter(i -> i != null).mapToInt(i -> i).toArray();
Exemplo:
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]