【问题标题】:How to join string in kotlin and add postfix only if more than 1 item如何在 kotlin 中加入字符串并仅在超过 1 个项目时添加后缀
【发布时间】: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 参数的确切用法。如果你不喜欢它在你的代码中的样子,我建议将它包装在一个辅助函数中,然后调用该函数以使你的代码变得美观和可读:)

标签: java arrays string kotlin


【解决方案1】:

由于您有 2 个案例,因此很难进一步压缩此逻辑,但我发现这是我所能产生的“整洁”:

animals.takeIf { size == 1 }?.get(0)?.name?:animals.joinToString(separator = "\n\n", postfix = "\n"){it.name}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-15
    • 2023-03-24
    • 2021-05-01
    • 2011-01-13
    • 2016-01-17
    • 1970-01-01
    • 1970-01-01
    • 2018-07-12
    相关资源
    最近更新 更多