Ce face List
List<T> este o colecție ordonată de elemente de tipul T. Fiecare element are o poziție (index) care începe de la 0: lista[0] este primul element, lista.size spune câte elemente sunt.
În Kotlin, List este doar pentru citire: nu are add sau remove. Pentru o listă pe care o modifici folosești MutableList<T> (creată cu mutableListOf). Orice MutableList este și o List, deci o poți da unei funcții care cere List.
„Doar pentru citire” nu înseamnă „imuabilă”: dacă în spatele unei List stă o MutableList, altcineva o poate modifica. Pentru parametrii funcțiilor este totuși alegerea bună: funcția promite că nu schimbă lista.
Parametri
| Parametru | Descriere |
|---|---|
E / T |
Tipul elementelor: Int, String, o clasă proprie. Toate elementele au același tip. |
Ce returnează
Un tip (interfață), nu o funcție. Liste concrete creezi cu listOf, mutableListOf, buildList sau cu funcții care întorc liste (map, filter).
Exemple
Exemplul 1: Citire după poziție și parcurgere
Parantezele drepte citesc elementul de la o poziție. Bucla for trece prin elemente în ordine.
fun main() {
val orase: List<String> = listOf("Iași", "Cluj", "Brașov")
println(orase)
println("Primul oraș: ${orase[0]}")
println("Câte orașe: ${orase.size}")
for (oras in orase) {
println("- $oras")
}
}
Rezultat
[Iași, Cluj, Brașov]
Primul oraș: Iași
Câte orașe: 3
- Iași
- Cluj
- Brașov
Exemplul 2: Parametru de tip List
Funcția medie cere o List<Int>, deci promite că doar citește. Îi putem da și o MutableList, pentru că orice listă modificabilă este și o listă.
fun medie(note: List<Int>): Double {
var suma = 0
for (nota in note) suma += nota
return suma.toDouble() / note.size
}
fun main() {
val noteAna = listOf(9, 10, 8)
val noteIon = mutableListOf(7, 6)
noteIon.add(8)
println("Ana: ${medie(noteAna)}")
println("Ion: ${medie(noteIon)}")
}
Rezultat
Ana: 9.0
Ion: 7.0
Exemplul 3: Două liste sunt egale dacă au aceleași elemente
== compară conținutul, în ordine, nu tipul concret al listei.
fun main() {
val a = listOf(1, 2, 3)
val b = mutableListOf(1, 2, 3)
val c = listOf(3, 2, 1)
println(a == b)
println(a == c)
}
Rezultat
true
false
Greșeli frecvente
- Încerci
lista.add(x)pe oList: nu compilează, pentru căListnu are funcții de modificare. Creează lista cumutableListOf. - Citești
lista[lista.size]: ultima poziție validă estesize - 1. Programul se oprește cuIndexOutOfBoundsException. FoloseștegetOrNullsaulastOrNullcând nu ești sigur.
Comenzi înrudite
listOf: Creează o listă din elementele date: listOf pentru citire, mutableListOf și arrayListOf pentru o listă pe care o modifici.buildList: Construiește o listă, un map sau o mulțime pas cu pas într-un bloc, apoi o întoarce doar pentru citire.List.getOrNull: Citește elementul de la o poziție fără risc: getOrNull dă null, getOrElse o valoare implicită când poziția nu există.Iterable.first: first/last întorc primul sau ultimul element (sau primul care îndeplinește o condiție); variantele OrNull dau null în loc de excepție.Iterable.forEach: Execută o acțiune pentru fiecare element, în ordine; forEachIndexed primește și poziția.