You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin对话列表按日期分组后追加TIME枚举类型项的实现问题

实现方案

你需要的逻辑可以通过遍历列表按日期分组,每组末尾插入TIME类型条目实现,完整可运行代码如下:

fun main() {
    val list = mutableListOf(
        Conversation(ConversationType.INCOMING.value, Sender(1, "2021/10/12")),
        Conversation(ConversationType.INCOMING.value, Sender(2, "2021/10/12")),
        Conversation(ConversationType.OUTGOING.value, Sender(3, "2021/10/11")),
        Conversation(ConversationType.OUTGOING.value, Sender(4, "2021/10/11")),
        Conversation(ConversationType.OUTGOING.value, Sender(5, "2021/10/11")),
        Conversation(ConversationType.OUTGOING.value, Sender(6, "2021/10/09")),
        Conversation(ConversationType.INCOMING.value, Sender(7, "2021/10/09")),
        Conversation(ConversationType.INCOMING.value, Sender(8, "2021/10/09")),
        Conversation(ConversationType.INCOMING.value, Sender(9, "2021/10/09")),
        Conversation(ConversationType.OUTGOING.value, Sender(10, "2021/10/08")),
        Conversation(ConversationType.OUTGOING.value, Sender(11, "2021/10/07"))
    )

    val result = mutableListOf<Conversation>()
    var lastProcessedDate: String? = null

    list.forEachIndexed { index, item ->
        val currentDate = item.sender.date
        // 日期切换时给上一组追加时间标记
        if (currentDate != lastProcessedDate && lastProcessedDate != null) {
            result.add(Conversation(ConversationType.TIME.value, Sender(date = lastProcessedDate)))
        }
        result.add(item)
        lastProcessedDate = currentDate
        // 遍历到末尾时追加最后一组的时间标记
        if (index == list.size - 1) {
            result.add(Conversation(ConversationType.TIME.value, Sender(date = currentDate)))
        }
    }

    // 输出验证
    result.forEach(::println)
}

// 原定义保持不变
enum class ConversationType(val value: Int) {
    INCOMING(1),
    TIME(0),
    OUTGOING(2);
}

data class Conversation(
    val type: Int? = null,
    val sender: Sender
)

data class Sender(
    val id: Int? = null,
    val date: String? = null
)

运行后输出完全符合你要求的格式:

Conversation(type=1, sender=Sender(id=1, date=2021/10/12))
Conversation(type=1, sender=Sender(id=2, date=2021/10/12))
Conversation(type=0, sender=Sender(id=null, date=2021/10/12))
Conversation(type=2, sender=Sender(id=3, date=2021/10/11))
Conversation(type=2, sender=Sender(id=4, date=2021/10/11))
Conversation(type=2, sender=Sender(id=5, date=2021/10/11))
Conversation(type=0, sender=Sender(id=null, date=2021/10/11))
Conversation(type=2, sender=Sender(id=6, date=2021/10/09))
Conversation(type=1, sender=Sender(id=7, date=2021/10/09))
Conversation(type=1, sender=Sender(id=8, date=2021/10/09))
Conversation(type=1, sender=Sender(id=9, date=2021/10/09))
Conversation(type=0, sender=Sender(id=null, date=2021/10/09))
Conversation(type=2, sender=Sender(id=10, date=2021/10/08))
Conversation(type=0, sender=Sender(id=null, date=2021/10/08))
Conversation(type=2, sender=Sender(id=11, date=2021/10/07))
Conversation(type=0, sender=Sender(id=null, date=2021/10/07))

如果后续API返回的列表未按日期连续排列,只需要在处理前先对列表按sender.date倒序排序即可,核心逻辑无需调整。

内容的提问来源于stack exchange,提问作者Compose Learner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 00:48:02