(Spanish) Obtener un String separado de una lista en Kotlin: joinToString()
Tags: kotlin, android, spanish
Published: 2020-06-30 16:01:56

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

```kotlin
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.

```kotlin
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.

```kotlin
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.

```kotlin
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.

```kotlin
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.

```kotlin
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.

```kotlin
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

```kotlin
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