kotlin 集合操作之 joinToString

public fun <T> Iterable<T>.joinToString(
    separator: CharSequence = ", ", 
    prefix: CharSequence = "", 
    postfix: CharSequence = "", 
    limit: Int = -1, 
    truncated: CharSequence = "...", 
    transform: ((T) -> CharSequence)? = null): String {
    return joinTo(StringBuilder(), separator, prefix, postfix, limit, truncated, transform)
            .toString()
}

示例

class Test4 {

    class School(var name: String, var id: Int)

    private val list: MutableList<School> by lazy {
        mutableListOf(
            School("A", 1),
            School("B", 2),
            School("C", 3),
            School("D", 4)
        )
    }

    //====================================================
    @Test
    fun Test40() {
        val s = list.map {
            it.name
        }.joinToString(separator = "/")
        println(s)
        //  A/B/C/D
    }

    //========================推荐============================
    // 简化:

    @Test
    fun Test41() {
        list.joinToString(separator = "/") {
            it.name
        }.apply {
            println(this)
            //  A/B/C/D
        }
    }

    //====================================================

    @Test
    fun Test42() {
        list.joinToString(
            separator = "/",
            prefix = "[",
            postfix = "]",
            limit = 2   //限制几个字符串来操作
        ) {
            it.name
        }.apply {
            println(this)
            //  [A/B/...]
        }
    }

    //====================================================

    @Test
    fun Test43() {
        list.joinToString(
            separator = "/",
            prefix = "[",   //前缀
            postfix = "]",  //后缀
            limit = 2,      //限制几个字符串来操作
            truncated = "=" //超过的使用什么来代替
        ) {
            it.name
        }.apply {
            println(this)
            //  [A/B/=]
        }
    }
}
### 使用 Kotlin Serialization 处理列表 为了在 Kotlin 中使用 `kotlinx.serialization` 来处理列表,可以利用其强大的序列化机制来轻松完成这一任务。下面是一个完整的例子,展示了如何定义一个包含列表属性的数据类,并对其进行序列化和反序列化。 #### 定义数据类和支持序列化的模块 首先,在项目的构建配置文件中添加必要的依赖项: ```groovy dependencies { implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.5.0") // 版本号可能有所不同 } ``` 接着创建一个带有泛型参数 T 的密封接口或抽象基类作为标记接口,以便更好地管理不同类型的数据对象。这里我们简单地定义了一个名为 `Item` 的普通数据类以及另一个包含这些项的集合类型 `ItemList`: ```kotlin import kotlinx.serialization.* import kotlinx.serialization.json.* @Serializable data class Item(val id: Int, val name: String) @Serializable data class ItemList(val items: List<Item>) ``` 上述代码片段定义了两个可被自动序列化的类:一个是代表单个项目实体的 `Item` 类;另一个则是用来封装多个此类实例的容器——即 `ItemList` 类[^1]。 #### 实现序列化与反序列化逻辑 有了前面准备好的模型之后,就可以很方便地将其转换成字符串形式存储起来或是从外部源读取回来再解析回原状了。下面是具体的实现方法: ```kotlin fun main() { // 创建测试用的对象实例 val itemList = ItemList(listOf( Item(1, "Apple"), Item(2, "Banana"), Item(3, "Orange") )) // 将对象转为JSON字符串 val jsonStr = Json.encodeToString(itemList) println(jsonStr) // 解析JSON字符串恢复原始对象 val restoredItemList: ItemList = Json.decodeFromString(jsonStr) println(restoredItemList.items.joinToString { "${it.id}: ${it.name}" }) } ``` 这段程序先构造了一个含有三个元素的 `ItemList` 对象,随后通过调用 `Json.encodeToString()` 方法把它编码成了 JSON 字符串表示形式并打印出来。紧接着又运用相反的过程—即借助于 `Json.decodeFromString()` 函数把之前得到的那个纯文本重新构建成原来的那个复杂结构体,并最终输出其中所含有的各个成员的信息。 #### 注意事项 当涉及到复杂的嵌套结构或者是自定义类型的字段时,请务必确保所有参与运算的部分都已经被正确地标记上了相应的注解(如 @Serializable),这样才能保证整个过程顺利无误地进行下去。另外需要注意的是,如果目标平台对于某些特定字符有限制的话,则应当考虑采用合适的编码方式加以规避[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值