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

如何无索引实现日历列表指定分组后日历项的删除及折叠?

实现方案

核心思路

通过遍历列表并维护状态标记,分三个阶段处理元素:

  • 未找到目标分组时,直接保留所有元素
  • 找到目标分组时,修改其collapsed属性并加入结果,同时标记已触发后续过滤逻辑
  • 触发过滤逻辑后,仅保留非CalendarDrawerCalendarItem类型的元素

类定义参考(基于需求推导)

sealed class CalendarDrawerListItem {
    data class CalendarDrawerGroupItem(val groupId: String, var collapsed: Boolean = false) : CalendarDrawerListItem()
    data class CalendarDrawerCalendarItem(val calendarId: String) : CalendarDrawerListItem()
    // 可扩展其他子类型
}

代码实现

fun processCalendarList(
    originalList: List<CalendarDrawerListItem>,
    targetGroupId: String
): List<CalendarDrawerListItem> {
    var hasFoundTargetGroup = false

    return originalList.fold(mutableListOf()) { result, item ->
        when {
            !hasFoundTargetGroup -> {
                if (item is CalendarDrawerListItem.CalendarDrawerGroupItem && item.groupId == targetGroupId) {
                    // 修改目标分组的collapsed属性并加入结果
                    val updatedGroup = item.copy(collapsed = true)
                    result.add(updatedGroup)
                    hasFoundTargetGroup = true
                } else {
                    result.add(item)
                }
            }
            else -> {
                // 目标分组之后,仅保留非CalendarDrawerCalendarItem的元素
                if (item !is CalendarDrawerListItem.CalendarDrawerCalendarItem) {
                    result.add(item)
                }
            }
        }
        result
    }
}

输入输出示例验证

输入列表:

val inputList = listOf(
    CalendarDrawerListItem.CalendarDrawerGroupItem("group1", false),
    CalendarDrawerListItem.CalendarDrawerCalendarItem("cal1"),
    CalendarDrawerListItem.CalendarDrawerGroupItem("targetGroup", false),
    CalendarDrawerListItem.CalendarDrawerCalendarItem("cal2"),
    CalendarDrawerListItem.CalendarDrawerCalendarItem("cal3"),
    CalendarDrawerListItem.CalendarDrawerGroupItem("group2", false)
)

调用方法后输出:

listOf(
    CalendarDrawerListItem.CalendarDrawerGroupItem("group1", false),
    CalendarDrawerListItem.CalendarDrawerCalendarItem("cal1"),
    CalendarDrawerListItem.CalendarDrawerGroupItem("targetGroup", true), // collapsed已设为true
    CalendarDrawerListItem.CalendarDrawerGroupItem("group2", false) // 保留后续分组,删除了cal2、cal3
)

关键说明

  • 全程未使用索引或硬编码位置,仅通过状态标记控制流程
  • 采用fold函数实现遍历与结果累积,贴合Kotlin函数式编程风格
  • 若需处理所有匹配的目标分组,只需调整状态标记逻辑(移除hasFoundTargetGroup的单次触发限制即可)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 04:45:44