Ce face Iterable.find
find { ... } parcurge colecția în ordine și se oprește la primul element pentru care condiția este true. Dacă nu găsește nimic, întoarce null. Este exact același lucru cu firstOrNull { ... }, doar cu un nume mai potrivit pentru căutări.
Pentru ultimul element care se potrivește există findLast { ... } (echivalent cu lastOrNull { ... }). Pentru poziția elementului, folosește indexOfFirst { ... }.
Parametri
| Parametru | Descriere |
|---|---|
conditie |
Funcția care întoarce true pentru elementul căutat. |
Ce returnează
Primul element potrivit sau null.
Exemple
Exemplul 1: Căutarea unui utilizator după email
Rezultatul are tipul Utilizator?, așa că tratăm cazul în care nu există.
data class Utilizator(val nume: String, val email: String)
fun main() {
val utilizatori = listOf(
Utilizator("Ana Pop", "ana@exemplu.ro"),
Utilizator("Ion Rusu", "ion@exemplu.ro"),
)
for (email in listOf("ion@exemplu.ro", "dan@exemplu.ro")) {
val gasit = utilizatori.find { it.email == email }
println(if (gasit != null) "$email -> ${gasit.nume}" else "$email -> cont inexistent")
}
}
Rezultat
ion@exemplu.ro -> Ion Rusu
dan@exemplu.ro -> cont inexistent
Exemplul 2: find, findLast și indexOfFirst
Prima și ultima zi cu ploaie, plus poziția primei zile.
fun main() {
val zile = listOf("luni", "marți", "miercuri", "joi", "vineri")
val ploaie = listOf(false, true, false, true, false)
val indexPrima = ploaie.indexOfFirst { it }
val primaZi = zile.find { ploaie[zile.indexOf(it)] }
val ultimaZi = zile.findLast { ploaie[zile.indexOf(it)] }
println("Prima zi cu ploaie: $primaZi (poziția $indexPrima)")
println("Ultima zi cu ploaie: $ultimaZi")
println(zile.find { it.startsWith("s") })
}
Rezultat
Prima zi cu ploaie: marți (poziția 1)
Ultima zi cu ploaie: joi
null
Greșeli frecvente
- Folosești
filter { ... }.firstOrNull(): verifică toată lista și creează una nouă.findse oprește la primul element găsit. - Pui
!!dupăfind„pentru că sigur există”. Dacă datele se schimbă, programul se oprește cuNullPointerException; preferă?:cu un mesaj clar.
Comenzi înrudite
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.any: any: măcar un element îndeplinește condiția; all: toate o îndeplinesc; none: niciunul nu o îndeplinește.Iterable.contains: contains (operatorul in) verifică dacă un element există; indexOf dă poziția primei apariții sau -1.Iterable.single: Întoarce singurul element (sau singurul care îndeplinește condiția); aruncă excepție dacă sunt zero sau mai multe.