Iterable.count în Kotlin

Numără elementele colecției sau doar pe cele care îndeplinesc o condiție.

Sintaxă
fun <T> Iterable<T>.count(): Int
fun <T> Iterable<T>.count(conditie: (T) -> Boolean): Int

Ce face Iterable.count

count { ... } întoarce câte elemente îndeplinesc condiția, fără să creeze o listă intermediară. Fără condiție, count() numără toate elementele (pentru liste și mulțimi e mai simplu size; count() este util pe secvențe și pe Iterable în general).

Pentru a număra fiecare valoare distinctă (de câte ori apare fiecare cuvânt, de exemplu) folosește groupingBy { it }.eachCount().

Parametri

Parametru Descriere
conditie Opțional: funcția care spune ce elemente se numără.

Ce returnează

Un Int.

Exemple

Exemplul 1: Câți elevi au trecut

count cu condiție; numărul de corigenți este diferența.

fun main() {
    val medii = listOf(9.5, 4.2, 7.8, 6.0, 3.9, 8.7)
    val promovati = medii.count { it >= 5 }
    println("Promovați: $promovati din ${medii.size}")
    println("Corigenți: ${medii.size - promovati}")
    println("Peste 9: ${medii.count { it > 9 }}")
}

Rezultat

Promovați: 4 din 6
Corigenți: 2
Peste 9: 1

Exemplul 2: Numărarea pe o secvență

Câte numere de la 1 la 1000 se divid cu 7, dar nu cu 2. Secvența nu are size, deci folosim count.

fun main() {
    val n = (1..1000).asSequence().filter { it % 7 == 0 }.count { it % 2 != 0 }
    println(n)
}

Rezultat

71

Greșeli frecvente

  • Scrii filter { ... }.size: funcționează, dar creează o listă doar ca să o numeri. count { ... } face același lucru direct.

Comenzi înrudite

  • Iterable.any: any: măcar un element îndeplinește condiția; all: toate o îndeplinesc; none: niciunul nu o îndeplinește.
  • Iterable.groupingBy: Pregătește o grupare după cheie; eachCount() numără apoi câte elemente are fiecare cheie (frecvența).
  • Iterable.filter: Creează o listă nouă doar cu elementele care îndeplinesc condiția (filterNot: cu cele care nu o îndeplinesc).
  • Iterable.sum: Adună toate numerele dintr-o listă, mulțime sau tablou și întoarce totalul.