Ce face Collection.toArray
toArray() fără argumente returnează un Object[]. De cele mai multe ori vrei un array cu tipul corect, de exemplu String[]; pentru asta scrie lista.toArray(new String[0]) sau, din Java 11, lista.toArray(String[]::new). Java creează un array de mărimea potrivită.
Array-ul este o copie: dacă îl modifici, lista nu se schimbă, și invers. Ordinea elementelor este cea în care le dă colecția: ordinea pozițiilor la List, ordinea sortată la TreeSet.
Metoda există pe orice Collection, deci și pe List și Set. Rezultatul este un array de obiecte (Integer[], nu int[]); pentru int[] folosește lista.stream().mapToInt(Integer::intValue).toArray().
Parametri
| Parametru | Descriere |
|---|---|
a |
Un array de tipul dorit. Dacă e prea mic (de obicei new T[0]), se creează unul nou de aceeași clasă. |
generator |
O funcție care creează array-ul, de obicei String[]::new. |
Ce returnează
Un array nou cu elementele colecției.
Exemple
Exemplul 1: Din listă în String[]
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<String> orase = List.of("Iași", "Cluj", "Arad");
String[] a = orase.toArray(new String[0]);
String[] b = orase.toArray(String[]::new);
Object[] c = orase.toArray();
System.out.println(Arrays.toString(a) + " lungime " + a.length);
System.out.println(Arrays.toString(b));
System.out.println(c.getClass().getSimpleName() + " " + Arrays.toString(c));
}
}
Rezultat
[Iași, Cluj, Arad] lungime 3
[Iași, Cluj, Arad]
Object[] [Iași, Cluj, Arad]
Exemplul 2: Dintr-o mulțime sortată, apoi spre int[]
TreeSet dă elementele în ordine crescătoare, deci și array-ul este sortat. Pentru un array de primitive, treci prin stream.
import java.util.Arrays;
import java.util.List;
import java.util.TreeSet;
public class Main {
public static void main(String[] args) {
TreeSet<Integer> note = new TreeSet<>(List.of(9, 6, 10, 6, 8));
Integer[] obiecte = note.toArray(Integer[]::new);
int[] primitive = note.stream().mapToInt(Integer::intValue).toArray();
System.out.println(Arrays.toString(obiecte));
System.out.println(Arrays.toString(primitive));
}
}
Rezultat
[6, 8, 9, 10]
[6, 8, 9, 10]
Exemplul 3: Array-ul este o copie
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<String> nume = new ArrayList<>(List.of("Ana", "Radu"));
String[] copie = nume.toArray(String[]::new);
copie[0] = "Elena";
nume.add("Ioana");
System.out.println("Array: " + Arrays.toString(copie));
System.out.println("Listă: " + nume);
}
}
Rezultat
Array: [Elena, Radu]
Listă: [Ana, Radu, Ioana]
Greșeli frecvente
- Faci cast:
(String[]) lista.toArray(). Array-ul returnat esteObject[], iar cast-ul aruncăClassCastException. FoloseștetoArray(new String[0]). - Aștepți un
int[]dinList<Integer>.toArraydăInteger[]; pentru primitive foloseștemapToInt(...).toArray().
Comenzi înrudite
Arrays.asList: Returnează o listă de mărime fixă legată de un array: poți citi și schimba elemente cu set, dar nu poți adăuga sau șterge.Arrays.toString: toString transformă un array în text de forma [1, 2, 3]; deepToString face același lucru pentru matrice (array-uri de array-uri).List: Interfața pentru liste ordonate: elementele au poziții (0, 1, 2…), se pot repeta și se pot citi după index.Set: Interfața pentru mulțimi: colecții fără duplicate, în care întrebi rapid dacă un element există.Collection.stream: Creează un Stream peste elementele colecției, ca să le filtrezi, transformi, sortezi sau aduni într-un rezultat.