Java 11
O novo toArray
método padrão na Collection
interface permite que os elementos da coleção sejam transferidos para uma matriz recém-criada do tipo de tempo de execução desejado. Ele toma IntFunction<T[]> generator
como argumento e pode ser usado como:
String[] array = set.toArray(String[]::new);
Já existe um método semelhante Collection.toArray(T[])
e essa adição significa que não podemos mais passar null
como argumento porque, nesse caso, a referência ao método seria ambígua. Mas ainda está tudo bem, pois os dois métodos lançam um NPE de qualquer maneira.
Java 8
No Java 8, podemos usar a API de fluxos:
String[] array = set.stream().toArray(String[]::new);
Também podemos usar a versão sobrecarregada do toArray (), que assume IntFunction<A[]> generator
como:
String[] array = set.stream().toArray(n -> new String[n]);
O objetivo da função do gerador aqui é pegar um número inteiro (tamanho da matriz desejada) e produzir uma matriz do tamanho desejado. Pessoalmente, prefiro a primeira abordagem usando referência de método do que a posterior usando expressão lambda.
toArray()
método que é claramente mencionado no Javadoc.