Array.toList în Kotlin

Tablouri (Array) Kotlin 1.0

Transformă un tablou într-o listă nouă, doar pentru citire, cu aceleași elemente.

Sintaxă
fun <T> Array<out T>.toList(): List<T>
fun IntArray.toList(): List<Int>

Ce face Array.toList

toList() copiază elementele tabloului într-o List. Lista se afișează frumos cu println, se compară cu == după conținut și poate fi dată funcțiilor care cer liste.

Pentru o listă modificabilă folosește toMutableList(). Invers, dintr-o listă obții un tablou cu toTypedArray() (sau toIntArray() pentru List<Int>).

Lista este o copie: modificările ulterioare ale tabloului nu se văd în ea. Dacă vrei o listă care „privește” tabloul fără copiere, există asList().

Ce returnează

List<T> cu elementele tabloului, în aceeași ordine.

Exemple

Exemplul 1: Din tablou în listă și înapoi

Lista se afișează direct. toTypedArray() face drumul invers.

fun main() {
    val tablou = arrayOf("Iași", "Cluj", "Oradea")
    val lista = tablou.toList()
    println(lista)

    val inapoi = (lista + "Galați").toTypedArray()
    println(inapoi.contentToString())

    println(intArrayOf(3, 1, 2).toList() == listOf(3, 1, 2))
}

Rezultat

[Iași, Cluj, Oradea]
[Iași, Cluj, Oradea, Galați]
true

Exemplul 2: Copie, nu legătură

Schimbăm tabloul după toList(): lista copiată nu se schimbă, dar cea creată cu asList() da.

fun main() {
    val temperaturi = intArrayOf(18, 21, 19)
    val copie = temperaturi.toList()
    val vedere = temperaturi.asList()

    temperaturi[0] = 25
    println("copie:  $copie")
    println("vedere: $vedere")
}

Rezultat

copie:  [18, 21, 19]
vedere: [25, 21, 19]

Greșeli frecvente

  • Te aștepți ca lista obținută cu toList() să urmărească tabloul. Este o copie făcută în momentul apelului.

Comenzi înrudite

  • Iterable.toList: Copiază elementele într-o listă nouă: toList dă o listă doar pentru citire, toMutableList una modificabilă.
  • arrayOf: Creează un tablou (Array) cu dimensiune fixă din elementele date; intArrayOf creează un tablou de Int primitive.
  • Array.contentToString: contentToString afișează elementele tabloului ca text; contentEquals compară două tablouri element cu element.