loading...
Cover image for (Spanish) Obtener un String separado de una lista en Kotlin:  joinToString()

(Spanish) Obtener un String separado de una lista en Kotlin: joinToString()

jbc7ag profile image Jess Barrientos ・3 min read

joinToString() genera un String desde una colección de elementos basado en los argumentos que le pasemos, si es que le pasamos alguno.

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

Ok, podemos ver que todos los argumentos son opcionales, esto significa que podemos usar esta función sin mandarle ninguno. En este caso la función regresa un resultado similar a cuando llamamos toString() en la coleción : Un String de elementos separado por comas.

listOf("1", "2", "3", "4", "5", "6").joinToString()
// output -> "1, 2, 3, 4, 5, 6"

listOf("1", "2", "3", "4", "5", "6").toString()
// output -> [1, 2, 3, 4, 5, 6]

Ahora, vamos a cambiar cada argumento:

Separator

Este argumento nos ayuda a agregar un separador a nuestro String, su valor por default es ", " y podemos cambiar este valor por lo que queramos, siempre y cuando sea un CharSequence.

listOf("1", "2", "3", "4", "5", "6").joinToString(separator = ".")
// output -> "1.2.3.4.5.6"

listOf("1", "2", "3", "4", "5", "6").joinToString(separator = "-")
// output -> "1-2-3-4-5-6"

listOf("1", "2", "3", "4", "5", "6").joinToString(separator = "@#€")
// output -> "1@#€2@#€3@#€4@#€5@#€6"

Prefix

Nos permite agregar un elemento al principio de la cadena.

listOf("1", "2", "3", "4", "5", "6").joinToString(prefix="$")
//output -> "$1, 2, 3, 4, 5, 6"

listOf("1", "2", "3", "4", "5", "6").joinToString(separator = "*", prefix="$")
//output -> "$1*2*3*4*5*6"

Postfix

Este argumento agrega un elemento al final de la cadena, al igual que prefix su valor por defautl es "", muy útil cuando necesitamos crear, por ejemplo, un query de SQL o una expresión regular.

listOf("1", "2", "3", "4", "5", "6").joinToString(postfix="$")
//output -> "1, 2, 3, 4, 5, 6$"

listOf("1", "2", "3", "4", "5", "6").joinToString(prefix = "[", postfix="]")
//output -> "[1, 2, 3, 4, 5, 6]"

Limit

A veces, nuestras colecciones pueden ser muy grandes, entonces podemos decirle a la función que solo queremos agregar unos cuantos elementos. limit toma un valor positivo ( >= 0 ). Por default, el valor es "-1", lo que significa que no hay un límite definido y tomara todos los elementos de la colección, pero, si le mandamos un 0, nada se concatena.

listOf("1", "2", "3", "4", "5", "6").joinToString(limit = 4)
// output -> "1, 2, 3, 4, ..."

listOf("1", "2", "3", "4", "5", "6").joinToString(limit = 0)
// output -> ...

listOf("1", "2", "3", "4", "5", "6").joinToString(limit = -1)
// output -> "1, 2, 3, 4, 5, 6"

Truncated

Como puedes ver, cuando limit es agregado, tres puntos aparecen al final del string, esto pasa por que los argumentos limit y truncated van juntos (o deberían). Por default su valor es "..." y podemos mandar casi cualquier cosa para customizar.

listOf("1", "2", "3", "4", "5", "6").joinToString(limit = 4, truncated = "")
// output -> "1, 2, 3, 4, "

listOf("1", "2", "3", "4", "5", "6").joinToString(limit = 4, truncated = "... will be continued")
// output -> "1, 2, 3, 4, ... will be continued"

Transform

Finalmente, para customizar la forma en la que nuestros elementos son mostrados: transform. Este argumento nos ayuda a cambiar cada elemento antes de agregarlo a el string resultante, su valor por default es null

listOf("1", "2", "3", "4", "5", "6").joinToString(transform = { it + 2 })
// output -> "12, 22, 32, 42, 52, 62"

listOf("1", "2", "3", "4", "5", "6").joinToString(transform = { it + " item" })
// output -> "1 item, 2 item, 3 item, 4 item, 5 item, 6 item"

listOf("1", "2", "3", "4", "5", "6").joinToString(transform = { "$"+it+".00" })

// output -> "$1.00, $2.00, $3.00, $4.00, $5.00, $6.00"

Para finalizar, Yo uso esta función cuando necesito crear un query o agregar un formato a los elementos de la lista, como en el último ejemplo de código agregandole "$" y ".00" para obtener un formato simple de precio.

¿Que otros usos le ves?


  • Instale IntelliJ IDEA para correr los ejemplos

Posted on by:

jbc7ag profile

Jess Barrientos

@jbc7ag

Mobile developer at Heart ❤

Discussion

pic
Editor guide