Ce face Iterable.toList
toList() creează o listă nouă cu elementele unei colecții, ale unui interval (1..5), ale unui set sau ale unui text (caracterele). Este și modul simplu de a face o copie a unei liste, care nu se mai schimbă când originalul se schimbă.
toMutableList() face o copie modificabilă: poți adăuga sau șterge elemente fără să atingi colecția originală. Este util când primești o List (doar citire) și vrei să lucrezi pe ea.
Ce returnează
O List<T> sau MutableList<T> nouă.
Exemple
Exemplul 1: Din interval, set și text în listă
Același apel merge pe surse diferite. Setul păstrează ordinea de inserare, deci și lista.
fun main() {
println((1..5).toList())
println(setOf("Iași", "Cluj").toList())
println("Ana".toList())
}
Rezultat
[1, 2, 3, 4, 5]
[Iași, Cluj]
[A, n, a]
Exemplul 2: Lucrul pe o copie modificabilă
Funcția primește o List și nu o poate schimba. Face o copie cu toMutableList, adaugă elementul și întoarce lista nouă.
fun cuElevNou(elevi: List<String>, nou: String): List<String> {
val copie = elevi.toMutableList()
copie.add(nou)
copie.sort()
return copie
}
fun main() {
val clasa = listOf("Maria", "Ana", "Ion")
val noua = cuElevNou(clasa, "Bogdan")
println("Originală: $clasa")
println("Nouă: $noua")
}
Rezultat
Originală: [Maria, Ana, Ion]
Nouă: [Ana, Bogdan, Ion, Maria]
Exemplul 3: Copie care nu se schimbă
instantaneu este o copie făcută la un moment dat. Elementele adăugate după aceea în coș nu apar în copie.
fun main() {
val cos = mutableListOf("pâine")
val instantaneu = cos.toList()
cos.add("lapte")
println("Coș: $cos")
println("Copie: $instantaneu")
}
Rezultat
Coș: [pâine, lapte]
Copie: [pâine]
Greșeli frecvente
- Scrii
val copie = listași crezi că ai o copie: ambele nume arată spre aceeași listă. FoloseștetoList()sautoMutableList(). - Faci cast
lista as MutableListca să poți adăuga: poate funcționa întâmplător sau poate arunca excepție. Copiază cutoMutableList().
Comenzi înrudite
Iterable.toSet: Transformă colecția într-o mulțime (fără duplicate): toSet, toMutableSet sau toSortedSet (sortată).Array.toList: Transformă un tablou într-o listă nouă, doar pentru citire, cu aceleași elemente.listOf: Creează o listă din elementele date: listOf pentru citire, mutableListOf și arrayListOf pentru o listă pe care o modifici.List.subList: Întoarce o vedere asupra unei porțiuni din listă, de la poziția deLa inclusiv până la panaLa exclusiv.