Iterable.reversed în Kotlin

Întoarce o listă nouă cu elementele în ordine inversă: ultimul devine primul.

Sintaxă
fun <T> Iterable<T>.reversed(): List<T>
fun <T> List<T>.asReversed(): List<T>

Ce face Iterable.reversed

reversed() nu sortează nimic: doar inversează ordinea existentă. Rezultatul este o listă nouă, iar colecția originală rămâne la fel.

asReversed() (pe liste) nu copiază elementele: întoarce o „vedere” inversată a aceleiași liste, utilă pentru liste mari. Pe o MutableList, reverse() (fără d) inversează pe loc.

Ce returnează

O List<T> cu elementele în ordine inversă.

Exemple

Exemplul 1: Ultimele mesaje primele

Mesajele sunt salvate în ordinea sosirii; pentru afișare le inversăm, ca cel mai nou să fie sus.

fun main() {
    val mesaje = listOf("Bună!", "Ce faci?", "Ne vedem la 5", "Am ajuns")
    for (m in mesaje.reversed()) println(m)
}

Rezultat

Am ajuns
Ne vedem la 5
Ce faci?
Bună!

Exemplul 2: Numărătoare inversă și palindrom

Inversăm o listă de numere; apoi comparăm lista de litere a unui cuvânt cu inversul ei. (Pe un interval, (1..5).reversed() dă progresia 5 downTo 1, nu o listă.)

fun main() {
    println(listOf(1, 2, 3, 4, 5).reversed())

    val cuvant = "capac"
    val litere = cuvant.toList()
    println("$cuvant este palindrom: ${litere == litere.reversed()}")
}

Rezultat

[5, 4, 3, 2, 1]
capac este palindrom: true

Exemplul 3: reversed, reverse și asReversed

reversed lasă lista neschimbată. asReversed urmărește lista: după add, elementul nou apare primul în vedere. reverse schimbă chiar lista.

fun main() {
    val coada = mutableListOf("Ana", "Ion", "Maria")
    val copie = coada.reversed()
    val vedere = coada.asReversed()

    coada.add("Radu")
    println("copie: $copie")
    println("vedere: $vedere")

    coada.reverse()
    println("după reverse: $coada")
}

Rezultat

copie: [Maria, Ion, Ana]
vedere: [Radu, Maria, Ion, Ana]
după reverse: [Radu, Maria, Ion, Ana]

Greșeli frecvente

  • Aștepți ca reversed() să sorteze descrescător: doar inversează ordinea. Pentru ordine descrescătoare folosește sortedDescending().
  • Confunzi reversed() (listă nouă) cu reverse() (schimbă lista pe loc, doar pe MutableList).

Comenzi înrudite

  • Iterable.sorted: Întoarce o listă nouă cu elementele în ordine crescătoare (sorted) sau descrescătoare (sortedDescending).
  • Iterable.shuffled: shuffled amestecă elementele într-o listă nouă, iar random alege un element la întâmplare.
  • List.takeLast: takeLast(n) întoarce ultimele n elemente ale listei, iar dropLast(n) lista fără ultimele n.
  • List.indices: indices este intervalul pozițiilor valide ale listei (0..size-1); lastIndex este poziția ultimului element.