我宁愿采用这种丑陋的方式从列表中构建字符串:
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("))')")
Run Code Online (Sandbox Code Playgroud)
问题是它在最后一个元素后面添加了一个逗号,如果我想避免这种情况,我需要添加另一个 if 检查最后一个元素的循环。
我想知道在 kotlin 中是否有更简洁的方法来做到这一点?
编辑
最终结果应该是这样的:
Serialized('IDs((A B,C D))')
Run Code Online (Sandbox Code Playgroud)
在 Kotlin 中,您可以将joinToString用于此类用例(它只处理在元素之间插入分隔符)。
它非常通用,因为它允许为每个元素指定一个转换函数(除了更经典的separator
, prefix
, postfix
)。这使得它相当于将所有元素映射到字符串,然后将它们连接在一起,但是在一次调用中。
如果input
确实像List<List<String>>
您在标题中提到的那样并且您在循环中假设,您可以使用:
input.joinToString(
prefix = "Serialized('IDs((",
postfix = "))')",
separator = ", ",
) { (x, y) -> "$x $y" }
Run Code Online (Sandbox Code Playgroud)
请注意,语法 with(x, y)
是一种解构语法,它会自动获取列表中列表的第一个和第二个元素(括号很重要)。
如果您的输入实际上是您在代码顶部编写的List<String>
内容,那么您可以使用:listOf("[A,B]", "[C,D]")
input.joinToString(
prefix = "Serialized('IDs((",
postfix = "))')",
separator = ", ",
) { it.removeSurrounding("[", "]").replace(",", " ") }
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1073 次 |
最近记录: |