Kotlin 列表过滤如何实现无匹配结果时返回原列表而非空列表
Kotlin列表过滤无匹配返回原列表实现方案
你可以按如下方式修改代码,满足inline函数定义、无匹配返回原列表的需求:
inline fun List<Obj>?.filterQueryText(queryText: String?) = this?.run { // 执行过滤逻辑 val filteredList = filter { queryText.equals(it.objName) } // 过滤结果非空返回过滤结果,为空返回原列表 filteredList.takeIf { it.isNotEmpty() } ?: this }.orEmpty()
逻辑说明
- 新增
inline关键字符合你对inline函数的要求 - 通过
run作用域获取原列表的引用,方便过滤结果为空时回退返回 takeIf判断过滤后的列表是否有匹配项,有就直接返回过滤结果,没有就返回原列表- 末尾保留
orEmpty()处理原列表本身为null的边界场景,和原有逻辑的空安全规则保持一致
可选优化
如果需要兼容查询文本为空/为null时直接返回原列表的场景,可以加前置判断避免不必要的列表遍历:
inline fun List<Obj>?.filterQueryText(queryText: String?) = this?.run { if (queryText.isNullOrEmpty()) return@run this filter { queryText.equals(it.objName) }.takeIf { it.isNotEmpty() } ?: this }.orEmpty()
内容的提问来源于stack exchange,提问作者amar2108
相关产品推荐
相关产品推荐

