Java 11
El nuevo toArraymétodo predeterminado en la Collectioninterfaz permite que los elementos de la colección se transfieran a una matriz recién creada del tipo de tiempo de ejecución deseado. Se toma IntFunction<T[]> generatorcomo argumento y se puede utilizar como:
String[] array = set.toArray(String[]::new);
Ya existe un método similar Collection.toArray(T[])y esta adición significa que ya no podremos pasarlo nullcomo argumento porque en ese caso la referencia al método sería ambigua. Pero todavía está bien ya que ambos métodos arrojan un NPE de todos modos.
Java 8
En Java 8 podemos usar secuencias API:
String[] array = set.stream().toArray(String[]::new);
También podemos hacer uso de la versión sobrecargada de toArray () que toma IntFunction<A[]> generatorcomo:
String[] array = set.stream().toArray(n -> new String[n]);
El propósito de la función del generador aquí es tomar un número entero (tamaño de la matriz deseada) y producir una matriz del tamaño deseado. Personalmente, prefiero el primer enfoque con referencia de método que el último con expresión lambda.
toArray()método que se menciona claramente en el Javadoc.