在本篇文章中,我们将了解 Kotlin 过滤功能 - partition. 它通过谓词过滤集合,并将不匹配的元素保存在单独的列表中。
Kotlin 中有很多有用的集合函数。了解这些并根据要求使用它们是很好的。这些收集功能之一是partition.
partition通过谓词过滤集合,并将不匹配的元素保存在单独的列表中。
让我们通过例子来学习。
考虑如下data类User:
data class User(val id: Int, val name: String, val isMentor: Boolean)
并且,列表User:
val users = arrayOf(
User(1, "Amit", true),
User(2, "Ronaldo", false),
User(1, "Messi", true),
User(3, "Neymar", false))
现在,让我们使用partition这个用户列表上的功能来过滤导师用户和非导师用户。
val (mentors, notMentors) = users.partition { it.isMentor }
现在,让我们打印mentors
println(mentors)
这将打印以下内容:
[User(id=1, name=Amit, isMentor=true),
User(id=1, name=Messi, isMentor=true)]
而且,当我们打印notMentors
println(notMentors)
这将打印以下内容:
[User(id=2, name=Ronaldo, isMentor=false),
User(id=3, name=Neymar, isMentor=false)]
如果我们浏览源代码,我们会发现以下实现:
public inline fun <T> Array<out T>.partition(predicate: (T) -> Boolean): Pair<List<T>, List<T>> {
val first = ArrayList<T>()
val second = ArrayList<T>()
for (element in this) {
if (predicate(element)) {
first.add(element)
} else {
second.add(element)
}
}
return Pair(first, second)
}
它正在做同样的事情,我们也会做。只是 Kotlin 开箱即用地提供了这些有用的功能,以便我们可以直接使用它们。
笔记:
- 它需要一个predicate.
- 它将原始数组拆分为一对列表并返回Pair<List, List>。
- 第一个列表包含predicate产生的元素true。
- 第二个列表包含predicate产生的元素false。
现在就是这样。
如果你觉得kotlin很有意思,但却不知如何去学习,那么为了帮助想学习 Kotlin ,我近日整理发布一份《高级Kotlin强化实战学习手册(附Demo)》供Android开发者进阶学习 Kotlin,内容涵盖 Kotlin 入门教程、Kotlin实战避坑指南、Kotlin Jetpack 实战三大模块。
你可以在文末自己领取这份kotlin的学习资料
第一章 Kotlin入门教程
● Kotlin 概述
● Kotlin 与 Java 比较
● 巧用 Android Studio
● 认识 Kotlin 基本类型
● 走进 Kotlin 的数组
● 走进 Kotlin 的集合
● 集合问题
● 完整代码
● 基础语法
第二章 Kotlin 实战避坑指南
● 方法入参是常量,不可修改
● 不要 Companion 、INSTANCE ?
● Java 重载,在 Kotlin 中怎么巧妙过渡一下?
● Kotlin 中的判空姿势
● Kotlin 复写 Java 父类中的方法
● Kotlin “狠”起来,连TODO 都不放过!
● is、as` 中的坑
● Kotlin 中的 Property 的理解
● also 关键字
● takeIf 关键字
● takeIf 关键字
● 单例模式的写法
第三章 项目实战《Kotlin Jetpack 实战》
● 从一个膜拜大神的 Demo 开始
● Kotlin 写 Gradle 脚本是一种什么体验?
● Kotlin 编程的三重境界
● Kotlin 高阶函数
● Kotlin 泛型
● Kotlin 扩展
● Kotlin 委托
● 协程“不为人知”的调试技巧
● 图解协程:suspend
需要的小伙伴可以点击下面卡片免费领取