MutableList.removeFirst în Kotlin

Scoate și întoarce primul (removeFirst) sau ultimul (removeLast) element al listei.

Sintaxă
fun <T> MutableList<T>.removeFirst(): T
fun <T> MutableList<T>.removeLast(): T
fun <T> MutableList<T>.removeFirstOrNull(): T?
fun <T> MutableList<T>.removeLastOrNull(): T?

Ce face MutableList.removeFirst

removeFirst() șterge primul element și îl întoarce; removeLast() face același lucru cu ultimul. Cu ele o listă poate funcționa ca o coadă (primul venit, primul servit) sau ca o stivă (ultimul adăugat, primul scos).

Pe o listă goală aruncă NoSuchElementException. Variantele removeFirstOrNull() și removeLastOrNull() întorc null în acest caz, ceea ce le face ușor de folosit într-o buclă while.

Pentru cozi mari, ArrayDeque din Kotlin are aceleași funcții și scoate primul element mai repede decât o listă obișnuită.

Ce returnează

Elementul scos (sau null la variantele OrNull pe o listă goală).

Exemple

Exemplul 1: Coada la ghișeu

Clienții sunt serviți în ordinea sosirii: scoatem mereu primul. Bucla se oprește când removeFirstOrNull întoarce null.

fun main() {
    val coada = mutableListOf("Ana", "Ion", "Maria")
    while (true) {
        val client = coada.removeFirstOrNull() ?: break
        println("Servim pe $client, mai așteaptă ${coada.size}")
    }
}

Rezultat

Servim pe Ana, mai așteaptă 2
Servim pe Ion, mai așteaptă 1
Servim pe Maria, mai așteaptă 0

Exemplul 2: Stiva de anulare (undo)

Ultima acțiune făcută este prima anulată, deci scoatem de la final cu removeLast.

fun main() {
    val actiuni = mutableListOf<String>()
    actiuni.add("scris titlu")
    actiuni.add("pus imagine")
    actiuni.add("șters paragraf")

    println("Anulez: ${actiuni.removeLast()}")
    println("Anulez: ${actiuni.removeLast()}")
    println("Rămâne: $actiuni")
}

Rezultat

Anulez: șters paragraf
Anulez: pus imagine
Rămâne: [scris titlu]

Exemplul 3: Listă goală

removeLastOrNull pe o listă goală întoarce null, fără eroare.

fun main() {
    val sarcini = mutableListOf("teme")
    println(sarcini.removeFirst())
    println(sarcini.removeLastOrNull() ?: "Nicio sarcină")
}

Rezultat

teme
Nicio sarcină

Greșeli frecvente

  • Apelezi removeFirst() pe o listă care poate fi goală: NoSuchElementException. Folosește removeFirstOrNull().
  • Folosești removeAt(0) repetat pe liste foarte mari: fiecare scoatere mută toate elementele. Pentru cozi mari folosește ArrayDeque.

Comenzi înrudite

  • MutableList.remove: remove șterge prima apariție a unei valori; removeAt șterge elementul de pe o poziție și îl întoarce.
  • 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.
  • MutableList.add: Adaugă un element la finalul listei sau la o poziție dată; addAll adaugă mai multe elemente deodată.
  • Collection.isEmpty: isEmpty/isNotEmpty verifică dacă o colecție are elemente; orEmpty transformă null în colecție goală; ifEmpty dă o alternativă.