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

Kotlin中如何将指定元素移至列表首位且保持列表不可变?

解决方案

方案一:简洁实现(适用于无重复元素场景)

如果列表中不会存在多个完全相同的Lessons对象(即key="priority"的元素唯一,或重复元素无需区分),可以用以下代码完成,全程保持列表不可变:

val resultList = lessons.find { it.key == "priority" }
    ?.let { listOf(it) + lessons.filterNot { item -> item == it } }
    ?: lessons

方案二:严格匹配原逻辑(仅移动第一个匹配元素)

如果需要和原代码逻辑完全一致——只移动第一个找到的key="priority"元素,保留后续可能存在的重复匹配元素,可以用索引定位的方式:

val priorityEntry = lessons.withIndex().find { it.value.key == "priority" }
val resultList = priorityEntry?.let { (index, lesson) ->
    listOf(lesson) + lessons.subList(0, index) + lessons.subList(index + 1, lessons.size)
} ?: lessons

方案优势说明

  1. 保持不可变:全程基于原不可变列表生成新列表,避免可变列表带来的状态副作用,符合函数式编程规范。
  2. 效率与安全兼顾:原方案的remove和add(0, ...)操作均为O(n)复杂度,上述不可变方案时间复杂度同样为O(n),但避免了修改原列表可能引发的并发问题或意外状态变更。
  3. 逻辑更清晰:借助Kotlin空安全特性和集合操作符,无需手动处理繁琐的空值分支修改逻辑,代码可读性更强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 18:09:18