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

jbc7ag

Jess Barrientos

Posted on June 30, 2020

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

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
Enter fullscreen mode Exit fullscreen mode

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]
Enter fullscreen mode Exit fullscreen mode

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"
Enter fullscreen mode Exit fullscreen mode

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"
Enter fullscreen mode Exit fullscreen mode

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]"
Enter fullscreen mode Exit fullscreen mode

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"
Enter fullscreen mode Exit fullscreen mode

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"
Enter fullscreen mode Exit fullscreen mode

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"
Enter fullscreen mode Exit fullscreen mode

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
💖 💪 🙅 🚩
jbc7ag
Jess Barrientos

Posted on June 30, 2020

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related