Ce face Collection.isEmpty
isEmpty() este true când colecția nu are elemente (size == 0), isNotEmpty() când are cel puțin unul. Se citesc mai ușor decât comparațiile cu size.
orEmpty() se apelează pe o colecție care poate fi null (List<T>?) și întoarce colecția, sau una goală dacă era null. Așa poți parcurge direct rezultatul fără verificări.
ifEmpty { ... } întoarce colecția dacă are elemente; dacă este goală, întoarce rezultatul blocului (de exemplu o listă implicită sau un mesaj).
Parametri
| Parametru | Descriere |
|---|---|
implicit |
Pentru ifEmpty: blocul care dă rezultatul când colecția este goală. |
Ce returnează
isEmpty/isNotEmpty: Boolean. orEmpty: colecția sau una goală. ifEmpty: colecția sau rezultatul blocului.
Exemple
Exemplul 1: Coș de cumpărături
Afișăm mesaje diferite după cum coșul are sau nu produse.
fun main() {
val cos = mutableListOf<String>()
println(if (cos.isEmpty()) "Coșul este gol" else "Ai ${cos.size} produse")
cos.add("cafea")
if (cos.isNotEmpty()) println("Poți plăti: $cos")
}
Rezultat
Coșul este gol
Poți plăti: [cafea]
Exemplul 2: orEmpty pe o listă care poate lipsi
Pentru „Vlad” map-ul întoarce null; orEmpty() o transformă în listă goală, deci size și for merg direct.
fun main() {
val prieteni: Map<String, List<String>> = mapOf("Ana" to listOf("Ion", "Maria"))
for (nume in listOf("Ana", "Vlad")) {
val lista = prieteni[nume].orEmpty()
println("$nume are ${lista.size} prieteni: $lista")
}
}
Rezultat
Ana are 2 prieteni: [Ion, Maria]
Vlad are 0 prieteni: []
Exemplul 3: ifEmpty: o valoare de rezervă
Dacă filtrul nu găsește nimic, propunem lista implicită.
fun main() {
val restaurante = listOf("Pizzeria Roma", "Bistro Copou", "Casa Veche")
for (cautare in listOf("Bistro", "Sushi")) {
val rezultat = restaurante.filter { cautare in it }.ifEmpty { listOf("(nimic găsit, încearcă alt cuvânt)") }
println("$cautare: $rezultat")
}
}
Rezultat
Bistro: [Bistro Copou]
Sushi: [(nimic găsit, încearcă alt cuvânt)]
Greșeli frecvente
- Scrii
lista?.isEmpty() == truepentru o listă care poate finull. Mai simplu:lista.isNullOrEmpty()saulista.orEmpty().isEmpty(). - Scrii
if (lista.size > 0): merge, darisNotEmpty()spune mai clar intenția.
Comenzi înrudite
emptyList: Întoarce o listă, un map sau o mulțime goală, doar pentru citire; util ca valoare implicită sau rezultat „nimic găsit”.Iterable.any: any: măcar un element îndeplinește condiția; all: toate o îndeplinesc; none: niciunul nu o îndeplinește.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.count: Numără elementele colecției sau doar pe cele care îndeplinesc o condiție.