Ce face MutableCollection.removeAll
removeAll { ... } șterge din colecție toate elementele pentru care condiția este adevărată. removeAll(altaColectie) șterge toate elementele care apar în cealaltă colecție. removeIf { ... } vine din Java și face același lucru ca removeAll cu condiție.
retainAll face opusul: păstrează doar elementele care îndeplinesc condiția (sau care sunt în cealaltă colecție) și le șterge pe restul.
Toate schimbă colecția pe loc și întorc true dacă s-a șters măcar un element. Sunt varianta corectă pentru a șterge în timp ce verifici, fără ConcurrentModificationException. Dacă vrei o listă nouă și să păstrezi originalul, folosește filter / filterNot.
Parametri
| Parametru | Descriere |
|---|---|
conditie |
Funcția care alege elementele de șters (removeAll, removeIf) sau de păstrat (retainAll). |
elemente |
O colecție: se șterg (sau se păstrează) elementele care apar în ea. |
Ce returnează
true dacă colecția s-a schimbat.
Exemple
Exemplul 1: Ștergerea notelor sub 5
removeAll cu condiție șterge toate notele mici. Al doilea apel nu mai găsește nimic și întoarce false.
fun main() {
val note = mutableListOf(9, 4, 7, 3, 10, 4)
println(note.removeAll { it < 5 })
println(note)
println(note.removeAll { it < 5 })
}
Rezultat
true
[9, 7, 10]
false
Exemplul 2: retainAll: doar ce e și în stoc
Din coș rămân doar produsele care există în stoc.
fun main() {
val cos = mutableListOf("pâine", "cafea", "lapte", "ciocolată")
val stoc = setOf("pâine", "lapte", "mere")
cos.retainAll(stoc)
println(cos)
}
Rezultat
[pâine, lapte]
Exemplul 3: removeIf și removeAll cu o colecție
removeIf scoate orașele cu nume scurt; removeAll(listOf(...)) scoate toate aparițiile orașelor date.
fun main() {
val orase = mutableListOf("Iași", "Cluj", "Arad", "Sibiu", "Constanța", "Arad")
orase.removeIf { it.length <= 4 }
println(orase)
val vizitate = mutableListOf("Sibiu", "Brașov", "Sibiu", "Oradea")
vizitate.removeAll(listOf("Sibiu"))
println(vizitate)
}
Rezultat
[Sibiu, Constanța]
[Brașov, Oradea]
Greșeli frecvente
- Ștergi elemente cu
removeîntr-o buclăforpe aceeași listă:ConcurrentModificationException. FoloseșteremoveAll { ... }. - Confunzi
removeAllcuretainAll: primul șterge ce se potrivește, al doilea păstrează ce se potrivește.
Comenzi înrudite
Iterable.filter: Creează o listă nouă doar cu elementele care îndeplinesc condiția (filterNot: cu cele care nu o îndeplinesc).MutableList.remove: remove șterge prima apariție a unei valori; removeAt șterge elementul de pe o poziție și îl întoarce.MutableList.clear: clear golește lista (size devine 0); fill înlocuiește toate elementele cu aceeași valoare, păstrând numărul lor.MutableList.add: Adaugă un element la finalul listei sau la o poziție dată; addAll adaugă mai multe elemente deodată.