Prefiero tener esta forma fea de construir una cadena a partir de una lista como:
val input = listOf("[A,B]", "[C,D]") val builder = StringBuilder() builder.append("Serialized('IDs((") for (pt in input) { builder.append(pt[0] + " " + pt[1]) builder.append(", ") } builder.append("))')")El problema es que agrega una coma después del último elemento y si quiero evitar eso, necesito agregar otra si verifico en el bucle el último elemento.
Me pregunto si hay una forma más concisa de hacer esto en kotlin.
EDITAR
El resultado final debe ser algo como:
Serialized('IDs((AB,CD))')En Kotlin puedes usar joinToString para este tipo de casos de uso (se trata de insertar el separador solo entre elementos).
Es muy versátil porque permite especificar una función de transformación para cada elemento (además de los más clásicos separator , prefix , postfix ). Esto hace que sea equivalente a asignar todos los elementos a cadenas y luego unirlos, pero en una sola llamada.
Si input es realmente una List<List<String>> como mencionas en el título y asumes en tu ciclo, puedes usar:
input.joinToString( prefix = "Serialized('IDs((", postfix = "))')", separator = ", ", ) { (x, y) -> "$x $y" } Tenga en cuenta que la sintaxis con (x, y) es una sintaxis de desestructuración que obtiene automáticamente el primer y segundo elemento de las listas dentro de su lista (los paréntesis son importantes).
Si su entrada es de hecho una List<String> como en listOf("[A,B]", "[C,D]") que escribió en la parte superior de su código, puede usar en su lugar:
input.joinToString( prefix = "Serialized('IDs((", postfix = "))')", separator = ", ", ) { it.removeSurrounding("[", "]").replace(",", " ") }Kotlin proporciona una función de extensión [joinToString][1] (en Iterable ) para este tipo de propósito.
input.joinToString(",", "Serialized('IDs((", "))')")Esto agregará correctamente el separador.
val input = listOf("[A,B]", "[C,D]") val result = "Serialized('IDs((" + input.joinToString(",") { it.removeSurrounding("[", "]").replace(",", " ") } + "))')" println(result) // Output: Serialized('IDs((AB,CD))')