(Spanish) Obtener un String separado de una lista en Kotlin: joinToString()
Jess Barrientos
Posted on June 30, 2020
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 June 30, 2020
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.