Java 11
Новий toArrayметод за замовчуванням в Collectionінтерфейсі дозволяє перенести елементи колекції до новоствореного масиву потрібного типу виконання. Він бере IntFunction<T[]> generatorаргумент і може використовуватися як:
String[] array = set.toArray(String[]::new);
Існує вже подібний метод, Collection.toArray(T[])і це доповнення означає, що ми більше не можемо передати nullаргумент, оскільки в такому випадку посилання на метод було б неоднозначним. Але це все добре, оскільки обидва способи все одно кидають NPE.
Java 8
У Java 8 ми можемо використовувати API потоків:
String[] array = set.stream().toArray(String[]::new);
Ми також можемо використовувати перевантажену версію toArray (), яка приймає IntFunction<A[]> generatorяк:
String[] array = set.stream().toArray(n -> new String[n]);
Метою функції генератора тут є взяти ціле число (розмір потрібного масиву) та створити масив потрібного розміру. Я особисто віддаю перевагу колишньому підходу, що використовує посилання на метод, ніж більш пізньому, який використовує лямбда-вираз.
toArray()методом, який чітко згадується в Javadoc.