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

在Kotlin中如何去除列表中的重复元素?有哪些实现方式?

Kotlin列表去除重复元素实现方案

Kotlin标准库内置了专用的去重函数,也可以通过for循环手动实现逻辑,两种方式都可以满足需求,具体实现如下:

1. 使用标准库内置函数实现(推荐)

Kotlin的Iterable接口默认提供了distinct()扩展函数,可直接完成去重,依赖元素的equals()和hashCode()方法判断重复,会保留元素第一次出现的顺序。

基础使用示例

针对你给出的carList场景,可按以下方式使用:

val carList = mutableListOf<Cars>()
carList.add(randomCar())

// 方案1:生成新的去重后的不可变列表,原列表保持不变
val distinctCars = carList.distinct()

// 方案2:直接修改原可变列表,原地完成去重
carList.apply {
    clear()
    addAll(distinctCars)
}

按指定字段去重

如果需要按照对象的某一个属性判断重复(比如按车辆ID、车牌等),可以使用distinctBy()函数,示例:

// 按车辆id属性去重
val distinctById = carList.distinctBy { it.carId }

2. 使用for循环手动实现

如果需要自定义去重逻辑,不依赖标准库函数,也可以通过遍历+临时集合的方式实现,逻辑如下:

val carList = mutableListOf<Cars>()
carList.add(randomCar())

val existedCars = hashSetOf<Cars>()
val filteredList = mutableListOf<Cars>()
// 遍历原列表,仅保留第一次出现的元素
for (car in carList) {
    if (car !in existedCars) {
        existedCars.add(car)
        filteredList.add(car)
    }
}

// 如需修改原列表,执行以下代码
carList.clear()
carList.addAll(filteredList)

注意事项

  • 无论使用哪种方案,都需要确保Cars类正确实现equals()和hashCode()方法:如果是Kotlin的data class,编译器会自动根据主构造参数生成这两个方法,无需额外处理;如果是普通类,需要手动重写,否则会默认按对象内存地址判断重复,即使属性完全一致的两个实例也会被识别为不同元素。
  • 上述所有实现都默认保留元素在原列表中第一次出现的顺序,符合绝大多数业务场景需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 01:42:01