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 cutoList(). - Folosești
subList(a, b)crezând căbeste inclus: nu este, spre deosebire deslice(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.