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
IntStreammapeando cada elemento para si mesmo (função de identidade), descompactando o intvalor retido por cada Integerobjeto (feito automaticamente desde o Java 5)
- obtendo a matriz
intchamandotoArray
Você também pode chamar explicitamente intValueatravé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 NullPointerExceptionse tiver alguma nullreferê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]