【发布时间】:2021-03-25 18:23:46
【问题描述】:
我有一些数据类的列表,我想将它们有效地加入到 kotlin 中的字符串中(代码量最少)。
数据类是:
data class Animal(val name: String, val description: String)
我在其他一些类中得到一个List<Animal>,我想将列表转换为字符串以按如下方式显示:
如果只列出一项(例如[Animal(name: "Dog", description: "Good dog, age 2 years"]),则只在一行显示名称:
Dog
如果列表中有超过 1 个项目(例如 [Dog, Cat, Mouse]),则在每个动物名称后显示一行,例如:
Dog
Cat
Mouse
我已经按照以下语句在代码中完成了此操作,但它非常难看+难以阅读......所以想问我如何以更高效、更整洁的方式做同样的事情..
解决方案 A:
animals.joinToString("\n\n") { it.name } + if (animals.size > 1) "\n" else ""
解决方案 B:
animals.joinToString(separator = "\n\n", postfix = if (animals.size > 1) "\n" else "") { it.name }
请提出如何改进这一点..
【问题讨论】:
-
我会说解决方案 B 可能尽可能“高效”(就代码行而言)。这看起来就像 joinToString 和 postfix 参数的确切用法。如果你不喜欢它在你的代码中的样子,我建议将它包装在一个辅助函数中,然后调用该函数以使你的代码变得美观和可读:)