Función joinToString En Kotlin

En este tutorial aprenderás sobre la aplicación de la función joinToString en Kotlin con el propósito de crear un String legible a partir de los elementos de una colección.

Función joinToString()

La función de extensión joinToString() es una utilidad que transforma una colección de elementos en un String. Puedes personalizar al construcción a partir de parámetros que especifican el separador, prefijo, sufijo, límite o transformación.

// Ejemplo de sintaxis de joinToString() para iterables
fun <T> Iterable<T>.joinToString(
    separator: CharSequence = ", ",
    prefix: CharSequence = "",
    postfix: CharSequence = "",
    limit: Int = -1,
    truncated: CharSequence = "...",
    transform: ((T) -> CharSequence)? = null
): String

Veamos el objetivo de cada parámetro nombrado:

  • separator: Es el conjunto de caracteres que se anexa como separador entre la conversión a string de cada elemento. El valor por defecto es una coma junto a un espacio en blanco (ej: "1, 2, 3")
  • prefix: Es el string que se usa como inicio del resultado final. El valor por defecto es un espacio en blanco.
  • postfix: Cadena que se anexa al final del resultado
  • limit: Determina una cantidad positiva de elementos que serán incluidos en la transformación. Su valor por defecto es -1, indicando que deben ser incluidos todos.
  • truncated: String que se agrega cuando se usa a limit para truncar el resultado
  • transform: Función lambda que transforma cada elemento de la colección y usarlo como parte del string final

A continuación verás varios ejemplos de joinToString() para comprender diferentes configuraciones al variar sus argumentos.

Aplicar Separador, Prefijo Y Sufijo A joinToString()

Tomemos como ejemplo la necesidad de imprimir una representación de la serie infinita, la cual se expresa como una sumatoria de n términos de la forma 1 + 2 + 3 ···.

Al aplicar joinToString() podremos llegar a la siguiente solución:

fun main() {
    val terms = 1..10
    val serieRepresentation = terms.joinToString(
        separator = " + ",
        prefix = "S = ",
        postfix = " + ···"
    )
    println(serieRepresentation)
}

Salida:

S = 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + ···

La configuración para obtener el string con forma de expresión de serie requiere el uso de un separador con un símbolo de adición y espacios en sus laterales.

El prefijo será la notación de serie con la letra mayúscula S y operador de asignación (=). Por el lado del sufijo tenemos el término final designado con tres operadores de viñeta (·).

Aplicar Límite Y Truncado En joinToString()

Ahora modifiquemos el uso de joinToString() en el caso anterior para limitar los términos a solo 5.

fun main() {
    val terms = 1..10
    val serieRepresentation = terms.joinToString(
        separator = " + ",
        prefix = "S = ",
        limit = 5,
        truncated = "···"
    )
    println(serieRepresentation)
}

Salida:

S = 1 + 2 + 3 + 4 + 5 + ···

En este caso pasamos 5 como argumento para limit y a truncated los tres puntos viñeta que representan el infinito al truncar los elementos incluidos.

Aplicar Transformación A joinToString()

Probemos el uso del parámetro de transformación para conseguir la expresión de la serie anterior, pero acompañando a cada término de la letra a y finalizando con an. Por ejemplo: a1 + a2 + ··· + an.

fun main() {
    val terms = 1..10
    val serieRepresentation = terms.joinToString(
        separator = " + ",
        prefix = "S = ",
        limit = 5,
        postfix = " + an",
        truncated = "···"
    ) { "a$it" }
    println(serieRepresentation)
}

Salida:

S = a1 + a2 + a3 + a4 + a5 + ··· + an

La función de transformación es sencilla, pasamos una lambda con una plantilla de string, donde concatenamos el carácter a junto al elemento actual a través de la referencia it. Esta nos da los términos consecutivos.

Para encontrar el espaciado entre el penúltimo término y an, agregamos a postfix para que haga parte del cierre del String.

¿Estás Creando Una App De tareas?

Te comparto una plantilla Android profesional con arquitectura limpia, interfaz moderna y funcionalidades listas para usar. Ideal para acelerar tu desarrollo.

Banner de plantilla de tareas Android

Únete Al Discord De Develou

Si tienes problemas con el código de este tutorial, preguntas, recomendaciones o solo deseas discutir sobre desarrollo Android conmigo y otros desarrolladores, únete a la comunidad de Discord de Develou y siéntete libre de participar como gustes. ¡Te espero!