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:链式调用组合逻辑
与 map
、sortedBy
等函数配合使用,实现复杂的数据处理流程。
示例代码:
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
实现高效的数据处理。结合 map
、flatMap
等函数,可以构建出功能强大的数据转换流程,提升开发效率和代码可读性。