Ce face Iterable.contains
contains(x) întoarce true dacă elementul există în colecție. De obicei se scrie cu operatorul in: x in lista, iar negația cu !in. Compararea se face cu equals (adică ==), deci pentru texte contează literele mari și mici.
indexOf(x) întoarce poziția primei apariții, sau -1 dacă elementul lipsește. lastIndexOf(x) dă ultima apariție.
Pe o listă, căutarea verifică elementele unul câte unul. Dacă faci multe verificări pe o colecție mare, transformă-o în Set: acolo in este aproape instantaneu.
Parametri
| Parametru | Descriere |
|---|---|
element |
Valoarea căutată. |
Ce returnează
contains: Boolean. indexOf: poziția (Int) sau -1.
Exemple
Exemplul 1: in, !in și indexOf
Pentru „Brașov” poziția este -1, pentru că nu este în listă.
fun main() {
val traseu = listOf("București", "Ploiești", "Sinaia", "Ploiești", "Buzău")
println("Sinaia" in traseu)
println("Brașov" !in traseu)
println(traseu.contains("ploiești"))
println("Prima dată prin Ploiești: poziția ${traseu.indexOf("Ploiești")}")
println("Ultima dată: poziția ${traseu.lastIndexOf("Ploiești")}")
println("Brașov: ${traseu.indexOf("Brașov")}")
}
Rezultat
true
true
false
Prima dată prin Ploiești: poziția 1
Ultima dată: poziția 3
Brașov: -1
Exemplul 2: Funcționează și pentru data class
Clasele data au equals generat, deci un obiect nou cu aceleași valori este găsit.
data class Loc(val rand: Int, val scaun: Int)
fun main() {
val ocupate = listOf(Loc(1, 4), Loc(3, 7), Loc(5, 2))
val cerute = listOf(Loc(3, 7), Loc(3, 8))
for (loc in cerute) {
println("$loc ${if (loc in ocupate) "ocupat" else "liber"}")
}
}
Rezultat
Loc(rand=3, scaun=7) ocupat
Loc(rand=3, scaun=8) liber
Greșeli frecvente
- Cauți un text fără să ții cont de literele mari:
"ploiești" in traseuestefalse. Foloseștetraseu.any { it.equals(x, ignoreCase = true) }. - Cauți obiecte ale unei clase obișnuite (nu
data): două obiecte cu aceleași câmpuri nu sunt egale, deciindăfalse.
Comenzi înrudite
Iterable.any: any: măcar un element îndeplinește condiția; all: toate o îndeplinesc; none: niciunul nu o îndeplinește.Iterable.find: Întoarce primul element care îndeplinește condiția sau null dacă nu există niciunul.List.binarySearch: Caută rapid un element într-o listă sortată; întoarce poziția lui sau un număr negativ care arată unde ar trebui inserat.setOf: Creează o mulțime: o colecție fără duplicate, în care verifici rapid dacă un element există.Map.containsKey: Verifică dacă map-ul are o anumită cheie (containsKey, operatorul in) sau o anumită valoare (containsValue).