当前位置: 首页 > news >正文

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

1. filter 函数的作用

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

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

2. 使用场景

场景 1:基础数据过滤

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

示例代码

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

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

上下文代码片段优化

    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:对象集合中按属性过滤

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

示例代码

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 等函数配合使用,实现复杂的数据处理流程。

示例代码

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

3. filter 相关变体函数

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

示例代码

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

4. 总结

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

http://www.xdnf.cn/news/228727.html

相关文章:

  • MATLAB小试牛刀系列(3)
  • linux系统加固
  • 基于 Rancher 部署 Kubernetes 集群的工程实践指南
  • StarRocks Lakehouse 如何重构大数据架构?
  • 基于标注数据的情感分析模型研究
  • 使用 Spring Data Redis 实现 Redis 数据存储详解
  • 【数据结构】——顺序表刷题
  • 论文阅读:2024 EMNLP User Inference Attacks on Large Language Models
  • MySQL表的内外连接
  • 黑群晖Moments视频无缩略图,安装第三方ffmpeg解决
  • kivy android打包buildozer.spec GUI配置
  • (Go Gin)Gin学习笔记(二):路由配置、基本路由、表单参数、上传单个文件、上传多个文件、浅扒路由原理
  • 2025年- H13-Lc121-189.轮转数组(普通数组)---java版
  • Neo4j多关系或多路径
  • 云备份服务器,数据备份服务器的方法有哪些?
  • 嵌入式软件--stm32 DAY 5 USART串口通讯(上)
  • java瘦身、升级graalvm
  • QT6 源(63)篇六:阅读与注释 QString 这个类,包含了 QString 类的 完整源码,也附上 QLatin1String 类的
  • Redis的简单介绍
  • k8s术语之Replication Controller
  • mmdeploy 转换torch为onnx
  • 2025磐石行动第八周WP
  • JavaScript性能优化实战之代码层面性能优化
  • 贪心算法求解边界最大数
  • 精益数据分析(34/126):深挖电商运营关键要点与指标
  • SAP-ABAP:在SAP系统中,COEP表(成本控制对象行项目表)详解
  • AI 生成UI交互效果
  • 基于C++的IOT网关和平台6:github项目ctGateway后台服务和数据模型
  • C++负载均衡远程调用学习之自定义内存池管理
  • SVTAV1源码-set_all_ref_frame_type