Iterable.toList în Kotlin

Copiază elementele într-o listă nouă: toList dă o listă doar pentru citire, toMutableList una modificabilă.

Sintaxă
fun <T> Iterable<T>.toList(): List<T>
fun <T> Iterable<T>.toMutableList(): MutableList<T>
fun <T> Collection<T>.toMutableList(): MutableList<T>

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ște toList() sau toMutableList().
  • Faci cast lista as MutableList ca să poți adăuga: poate funcționa întâmplător sau poate arunca excepție. Copiază cu toMutableList().

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.