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

Kotlin中如何按多个enum常量过滤同枚举对象的常量列表

你现有代码的问题在于:filter 函数要求传入的lambda返回布尔值,用来判断当前元素是否需要保留。而你写的when表达式在匹配到目标枚举后仅执行了空代码块{},没有返回值,无法通过编译。

正确实现方式

方案1:调整when表达式返回布尔值

匹配到允许的枚举值时返回true,其余情况返回false即可:

val list = dataList.filter {
    when(it.type) {
        Type.ACTIVE,
        Type.RENEWED,
        Type.OTHER -> true
        else -> false
    }
}

方案2:用in判断简化写法(更推荐)

把允许的枚举值放到Set中,直接用包含判断实现过滤,代码更简洁易读,且Set的包含判断时间复杂度为O(1),枚举值较多时效率更高:

// 可复用的允许枚举列表
val allowedTypes = setOf(Type.ACTIVE, Type.RENEWED, Type.OTHER)
val list = dataList.filter { it.type in allowedTypes }

如果是一次性过滤不需要复用允许列表,也可以直接写在filter内部:

val list = dataList.filter { it.type in setOf(Type.ACTIVE, Type.RENEWED, Type.OTHER) }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 18:36:03