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
相关产品推荐
相关产品推荐

