kotlin 过滤 filter 函数的作用和使用场景

1. filter 函数的作用

filter 是 Kotlin 集合操作中的一个高阶函数,用于根据指定条件从集合中筛选出符合条件的元素

  • 作用 :遍历集合中的每个元素,并通过给定的 lambda 表达式判断是否保留该元素。
  • 返回值:一个新的集合,只包含满足条件的元素。
  • 惰性操作 :仅在需要时才会处理全部数据(对于 Sequence)。
  • 常用于:数据过滤、清洗、查询等场景。

2. 使用场景

场景 1:基础数据过滤

从字符串或数值集合中筛选符合特定条件的数据。

示例代码

kotlin 复制代码
val numbers = listOf(1, 2, 3, 4, 5)
val evenNumbers = numbers.filter { it % 2 == 0 }
println(evenNumbers) // 输出: [2, 4]
场景 2:结合 flatMap 进行嵌套结构过滤

对嵌套集合进行扁平化后过滤,提取所有符合条件的元素。

上下文代码片段优化

kotlin 复制代码
    var nameList = listOf(
        listOf("huang xao ming", "li lian jie", "li xao long"),
        listOf("liu jun", "li yuan ba", "liu ming"),
        listOf("liu jia", "huang jia ju", "huang fei hong")
    )
nameList.flatMap { group ->
    group.filter { name -> name.contains("liu") }
}.map {
    print("$it ")
}
// 输出: liu jun liu ming liu jia (假设原始数据无多余空格)

此方式将多个子列表合并成一个列表后再做统一过滤,适用于多组数据统一筛选。

场景 3:对象集合中按属性过滤

当集合元素为对象时,可基于对象的某个属性进行过滤。

示例代码

kotlin 复制代码
data class User(val name: String, val age: Int)

val users = listOf(
    User("Alice", 25),
    User("Bob", 17),
    User("Charlie", 30)
)

val adults = users.filter { it.age >= 18 }
println(adults) // 输出: [User(name=Alice, age=25), User(name=Charlie, age=30)]
场景 4:链式调用组合逻辑

mapsortedBy 等函数配合使用,实现复杂的数据处理流程。

示例代码

kotlin 复制代码
val filteredNames = users
    .filter { it.age >= 18 }
    .map { it.name }
    .sorted()
println(filteredNames) // 输出: [Alice, Charlie]

3. filter 相关变体函数

函数名 功能说明
filter 根据条件保留元素
filterNot 反向过滤,保留不满足条件的元素
filterNotNull 过滤掉集合中的 null 值
filterIsInstance<T> 提取集合中指定类型的元素

示例代码

kotlin 复制代码
val mixedList = listOf("apple", null, 42, "banana", 3.14)
val stringsOnly = mixedList.filterIsInstance<String>()
println(stringsOnly) // 输出: [apple, banana]

4. 总结

filter 是 Kotlin 中非常实用的函数,能够帮助开发者快速实现数据筛选和清洗。无论是在简单的字符串/数字集合,还是复杂的对象集合中,都可以通过 filter 实现高效的数据处理。结合 mapflatMap 等函数,可以构建出功能强大的数据转换流程,提升开发效率和代码可读性。

相关推荐
lee_curry5 小时前
第四章 jvm中的垃圾回收器
java·jvm·垃圾收集器
wanhengidc5 小时前
云手机 高振畅玩不踩坑
运维·服务器·安全·web安全·智能手机
QQ1__8115175156 小时前
Spring boot名城小区物业管理系统信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】
前端·vue.js·spring boot
钛态6 小时前
前端微前端架构:大项目的救命稻草还是自找麻烦?
前端·vue·react·web
一粒黑子6 小时前
【实战解析】阿里开源 PageAgent:纯前端 GUI Agent,一行JS让网页支持自然语言操控
前端·javascript·开源
独角鲸网络安全实验室6 小时前
2026微信小程序抓包全解析:从实操落地到合规风控,解锁前端调试新范式
前端·微信小程序·小程序·抓包·系统代理绕过·https证书严格校验·进程隔离
紫微AI6 小时前
前端文本测量成了卡死一切创新的最后瓶颈,pretext实现突破了
前端·人工智能·typescript
GISer_Jing6 小时前
AI前端(From豆包)
前端·aigc·ai编程
IT枫斗者6 小时前
前端部署后如何判断“页面是不是最新”?一套可落地的版本检测方案(适配 Vite/Vue/React/任意 SPA)
前端·javascript·vue.js·react.js·架构·bug
测试修炼手册6 小时前
[测试技术] 深入理解 JSON Web Token (JWT)
前端·json