
集合
|
105
5.10
自定义迭代器
问题
如何使自定义的集合类以更简单的方式进行遍历。
解决方案
定义一个返回迭代器的操作符函数,该迭代器同时实现 next 与 hasNext 函数。
讨论
Java 中为实现迭代器设计模式而定义了 Iterator 接口。示例 5-28 提供了 Kotlin 中的
相关定义。
示例 5-28:kotlin.collections 中的 Iterator 接口
interface Iterator<out T> {
operator fun next(): T
operator fun hasNext(): Boolean
}
在 Java 中,for-each 循环可以使你迭代实现 Iterable 的任何类。在 Kotlin 中,for-in
循环可以运行相似的约束。考虑一个名为 Player 的数据类与一个名为 Team 的类,参
见示例 5-29。
示例 5-29:Player 与 Team 类
data class Player(val name: String)
class Team(val name: String,
val players: MutableList<Player> = mutableListOf()) {
fun addPlayers(vararg people: Player) =
players.addAll(people)
// ... 其他所需的函数 ...
}
Team 包含了一个存储 Player 实例的可变 list。如果你拥有一个包含几个玩家的团队, ...