List.subList în Kotlin

Întoarce o vedere asupra unei porțiuni din listă, de la poziția deLa inclusiv până la panaLa exclusiv.

Sintaxă
fun subList(deLa: Int, panaLa: Int): List<E>

Ce face List.subList

subList(deLa, panaLa) întoarce elementele de la poziția deLa (inclusă) până la panaLa (exclusă). Numărul de elemente este panaLa - deLa.

Spre deosebire de slice, rezultatul nu este o copie, ci o vedere asupra listei originale. Pe o MutableList, schimbările făcute prin vedere apar în lista originală: lista.subList(0, 3).clear() șterge primele trei elemente.

Dacă lista originală își schimbă dimensiunea după ce ai creat vederea, folosirea vederii aruncă ConcurrentModificationException. Când ai nevoie de o copie independentă, scrie subList(a, b).toList().

Parametri

Parametru Descriere
deLa Poziția de început, inclusă.
panaLa Poziția de final, exclusă.

Ce returnează

O List<E> (pe MutableList, o MutableList<E>) legată de lista originală.

Exemple

Exemplul 1: Capăt exclus

subList(1, 4) are 3 elemente: pozițiile 1, 2 și 3.

fun main() {
    val luni = listOf("ian", "feb", "mar", "apr", "mai", "iun")
    println(luni.subList(1, 4))
    println(luni.subList(0, 3).size)
}

Rezultat

[feb, mar, apr]
3

Exemplul 2: Ștergerea unei porțiuni prin vedere

Golind vederea se golesc pozițiile corespunzătoare din lista originală.

fun main() {
    val sarcini = mutableListOf("spălat vase", "teme", "cumpărături", "sport", "citit")
    sarcini.subList(1, 3).clear()
    println(sarcini)
}

Rezultat

[spălat vase, sport, citit]

Exemplul 3: Copie independentă cu toList

copie nu mai depinde de listă, deci putem adăuga elemente în listă și apoi folosi copia fără probleme.

fun main() {
    val note = mutableListOf(7, 8, 9, 10)
    val copie = note.subList(0, 2).toList()
    note.add(6)
    println(copie)
    println(note)
}

Rezultat

[7, 8]
[7, 8, 9, 10, 6]

Greșeli frecvente

  • Adaugi elemente în lista originală și apoi folosești o vedere creată înainte: ConcurrentModificationException. Fă o copie cu toList().
  • Folosești subList(a, b) crezând că b este inclus: nu este, spre deosebire de slice(a..b).

Comenzi înrudite

  • List.slice: Întoarce o listă nouă cu elementele de la pozițiile date: un interval (2..4) sau o listă de indici.
  • Iterable.take: take(n) întoarce primele n elemente, iar drop(n) întoarce tot ce rămâne după ce sari peste primele n.
  • Iterable.toList: Copiază elementele într-o listă nouă: toList dă o listă doar pentru citire, toMutableList una modificabilă.
  • MutableList.clear: clear golește lista (size devine 0); fill înlocuiește toate elementele cu aceeași valoare, păstrând numărul lor.