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

Kotlin中从列表移除另一列表元素的实现问题

移除list1中存在于list2的元素问题解决

你的代码逻辑搞反了:filter会保留lambda返回true的元素,而你写的list2.any { e2 == e1 }是判断当前元素存在于list2中,所以最终保留的是list1和list2的交集,得到[3,4,5]。要得到预期的[1,2,6],需要保留不存在于list2中的元素,只需要把条件取反即可。

快速修正版

直接对判断条件取反:

val list1 = listOf(1,2,3,4,5,6)
val list2 = listOf(3,4,5,7,8)

val l3 = list1.filter { e1 -> !list2.any { e2 -> e2 == e1 } }
println(l3) // 输出 [1, 2, 6]

性能优化版

如果list2元素较多,用any每次遍历list2效率不高(时间复杂度O(n*m)),建议先把list2转成Set,利用Set的O(1)查询特性:

val list1 = listOf(1,2,3,4,5,6)
val list2 = listOf(3,4,5,7,8)

val list2Set = list2.toSet()
val l3 = list1.filter { !list2Set.contains(it) }
println(l3) // 输出 [1, 2, 6]

更简洁的写法

Kotlin集合支持-运算符,直接计算两个集合的差集,效果和上面一致:

val list1 = listOf(1,2,3,4,5,6)
val list2 = listOf(3,4,5,7,8)

val l3 = list1 - list2
println(l3) // 输出 [1, 2, 6]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 12:24:16