Iterable.joinToString în Kotlin

Lipește elementele într-un singur text, cu separatorul ales, prefix, sufix și, opțional, o transformare.

Sintaxă
fun <T> Iterable<T>.joinToString(
    separator: CharSequence = ", ",
    prefix: CharSequence = "",
    postfix: CharSequence = "",
    limit: Int = -1,
    truncated: CharSequence = "...",
    transform: ((T) -> CharSequence)? = null
): String

Ce face Iterable.joinToString

joinToString() transformă fiecare element în text și le unește. Implicit separatorul este ", ". Poți schimba separatorul, poți adăuga un prefix și un postfix și poți da o funcție transform care spune cum se scrie fiecare element.

Cu limit afișezi doar primele elemente, urmate de textul truncated (implicit ...). Toți parametrii au valori implicite, așa că se folosesc de obicei cu nume: joinToString(separator = " | ").

Parametri

Parametru Descriere
separator Textul pus între elemente; implicit ", ".
prefix / postfix Text pus la început și la final.
limit / truncated Câte elemente se afișează și ce text urmează după ele.
transform Funcția care transformă fiecare element în text.

Ce returnează

Un String.

Exemple

Exemplul 1: Separatoare diferite

Fără argumente, elementele sunt separate prin virgulă și spațiu. Apoi folosim alt separator și paranteze.

fun main() {
    val orase = listOf("Iași", "Cluj", "Timișoara")
    println(orase.joinToString())
    println(orase.joinToString(" - "))
    println(orase.joinToString(separator = " | ", prefix = "[", postfix = "]"))
}

Rezultat

Iași, Cluj, Timișoara
Iași - Cluj - Timișoara
[Iași | Cluj | Timișoara]

Exemplul 2: Cu transformare

Lambda spune cum arată fiecare element în text: numele produsului și prețul.

fun main() {
    val cos = listOf("pâine" to 4.5, "lapte" to 7.0, "mere" to 6.2)
    val bon = cos.joinToString(separator = "\n") { (produs, pret) -> "$produs: $pret lei" }
    println(bon)
}

Rezultat

pâine: 4.5 lei
lapte: 7.0 lei
mere: 6.2 lei

Exemplul 3: Listă lungă trunchiată

Din 20 de numere afișăm doar primele 5, urmate de „și altele”.

fun main() {
    val numere = (1..20).toList()
    println(numere.joinToString(limit = 5, truncated = "și altele"))
}

Rezultat

1, 2, 3, 4, 5, și altele

Greșeli frecvente

  • Construiești textul cu o buclă și +=, apoi tai ultima virgulă: joinToString pune separatorul doar între elemente.
  • Afișezi un tablou cu println(tablou) și apare ceva de forma [I@1b6d3586: folosește tablou.joinToString() sau contentToString().

Comenzi înrudite

  • Iterable.map: Creează o listă nouă în care fiecare element este rezultatul funcției aplicate elementului original.
  • Array.contentToString: contentToString afișează elementele tabloului ca text; contentEquals compară două tablouri element cu element.
  • Iterable.fold: Pornește de la o valoare inițială și o combină pe rând cu fiecare element, întorcând rezultatul final.
  • Iterable.forEach: Execută o acțiune pentru fiecare element, în ordine; forEachIndexed primește și poziția.