Iterable.take în Kotlin

take(n) întoarce primele n elemente, iar drop(n) întoarce tot ce rămâne după ce sari peste primele n.

Sintaxă
fun <T> Iterable<T>.take(n: Int): List<T>
fun <T> Iterable<T>.drop(n: Int): List<T>

Ce face Iterable.take

take(n) creează o listă nouă cu primele n elemente. Dacă colecția are mai puține elemente, le întoarce pe toate, fără eroare.

drop(n) face complementul: sare peste primele n elemente și întoarce restul. Dacă n depășește numărul de elemente, rezultatul este o listă goală. Împreună, take(n) + drop(n) dă colecția întreagă.

Pe secvențe (Sequence) take este leneș: oprește calculul după n elemente, deci merge și pe secvențe infinite.

Parametri

Parametru Descriere
n Câte elemente se iau (take) sau se sar (drop). Nu poate fi negativ.

Ce returnează

O List<T> nouă.

Exemple

Exemplul 1: Primii trei și restul clasamentului

Lista este deja în ordinea clasamentului. take(3) dă podiumul, drop(3) pe ceilalți.

fun main() {
    val clasament = listOf("Maria", "Ana", "Ion", "Radu", "Elena", "Dan")
    println("Podium: ${clasament.take(3)}")
    println("Ceilalți: ${clasament.drop(3)}")
}

Rezultat

Podium: [Maria, Ana, Ion]
Ceilalți: [Radu, Elena, Dan]

Exemplul 2: n mai mare decât lista

Nu apare nicio eroare: take întoarce tot ce există, iar drop o listă goală.

fun main() {
    val note = listOf(9, 8)
    println(note.take(5))
    println(note.drop(5))
}

Rezultat

[9, 8]
[]

Exemplul 3: Sărirea antetului dintr-un fișier CSV

Prima linie conține numele coloanelor, așa că o sărim cu drop(1) înainte de a citi datele.

fun main() {
    val linii = listOf("nume,oras,varsta", "Ana,Iași,21", "Ion,Cluj,23")
    for (linie in linii.drop(1)) {
        val (nume, oras, varsta) = linie.split(",")
        println("$nume din $oras are $varsta de ani")
    }
}

Rezultat

Ana din Iași are 21 de ani
Ion din Cluj are 23 de ani

Greșeli frecvente

  • Dai un n negativ: IllegalArgumentException. Valoarea trebuie să fie 0 sau mai mare.
  • Vrei ultimele elemente și scrii take: pentru final folosește takeLast.

Comenzi înrudite

  • Iterable.takeWhile: takeWhile ia elementele de la început cât timp condiția e adevărată; dropWhile le sare și întoarce restul.
  • List.takeLast: takeLast(n) întoarce ultimele n elemente ale listei, iar dropLast(n) lista fără ultimele n.
  • List.slice: Întoarce o listă nouă cu elementele de la pozițiile date: un interval (2..4) sau o listă de indici.
  • Iterable.chunked: Împarte colecția în bucăți consecutive de câte n elemente; ultima bucată poate fi mai mică.
  • Iterable.sorted: Întoarce o listă nouă cu elementele în ordine crescătoare (sorted) sau descrescătoare (sortedDescending).