emptyList în Kotlin

Întoarce o listă, un map sau o mulțime goală, doar pentru citire; util ca valoare implicită sau rezultat „nimic găsit”.

Sintaxă
fun <T> emptyList(): List<T>
fun <K, V> emptyMap(): Map<K, V>
fun <T> emptySet(): Set<T>

Ce face emptyList

emptyList(), emptyMap() și emptySet() întorc colecții fără elemente, doar pentru citire. Sunt potrivite ca valoare implicită a unui parametru sau ca rezultat al unei funcții care nu a găsit nimic, în locul lui null.

Tipul trebuie să fie cunoscut: fie îl scrii între <> (emptyList<String>()), fie îl deduce compilatorul din context (tipul de retur al funcției, tipul variabilei).

Pe o colecție goală, size este 0, isEmpty() este true, iar parcurgerea cu for nu face nimic. Nu poți adăuga elemente; pentru asta creezi o colecție cu mutableListOf().

Ce returnează

O List, un Map sau un Set gol.

Exemple

Exemplul 1: Rezultat gol în loc de null

Funcția întoarce o listă goală când orașul nu este cunoscut. Codul care o apelează nu trebuie să verifice null.

fun cartiere(oras: String): List<String> =
    when (oras) {
        "Iași" -> listOf("Copou", "Tătărași", "Nicolina")
        "Cluj" -> listOf("Mănăștur", "Gheorgheni")
        else -> emptyList()
    }

fun main() {
    for (oras in listOf("Iași", "Sibiu")) {
        val lista = cartiere(oras)
        println("$oras: ${lista.size} cartiere $lista")
    }
}

Rezultat

Iași: 3 cartiere [Copou, Tătărași, Nicolina]
Sibiu: 0 cartiere []

Exemplul 2: Map și mulțime goale

Tipul se scrie explicit, pentru că nu există elemente din care să fie dedus.

fun main() {
    val preturi = emptyMap<String, Double>()
    val etichete = emptySet<String>()

    println(preturi)
    println(etichete)
    println(preturi.isEmpty())
    println(preturi["pâine"])
    println("nou" in etichete)
}

Rezultat

{}
[]
true
null
false

Exemplul 3: Valoare implicită pentru un parametru

Dacă nu dăm reducerile, parametrul primește un map gol și funcția merge mai departe fără verificări speciale.

fun pretFinal(produs: String, pret: Double, reduceri: Map<String, Int> = emptyMap()): Double {
    val procent = reduceri[produs] ?: 0
    return pret * (100 - procent) / 100
}

fun main() {
    println(pretFinal("caiet", 12.0))
    println(pretFinal("caiet", 12.0, mapOf("caiet" to 25)))
}

Rezultat

12.0
9.0

Greșeli frecvente

  • Scrii val l = emptyList() fără tip și fără context: compilatorul nu poate deduce T.
  • Încerci să adaugi într-o listă goală obținută cu emptyList(). Pentru adăugare ai nevoie de mutableListOf<T>().

Comenzi înrudite

  • listOf: Creează o listă din elementele date: listOf pentru citire, mutableListOf și arrayListOf pentru o listă pe care o modifici.
  • mapOf: Creează un map (dicționar cheie → valoare) din perechi scrise cu „to”; mutableMapOf dă unul pe care îl poți modifica.
  • setOf: Creează o mulțime: o colecție fără duplicate, în care verifici rapid dacă un element există.
  • Collection.isEmpty: isEmpty/isNotEmpty verifică dacă o colecție are elemente; orEmpty transformă null în colecție goală; ifEmpty dă o alternativă.