kotlin - Kotlin:自定义顺序的迭代器
问题描述
我需要以自定义顺序(即递增基数)遍历集合列表。可以在 Kotlin 中创建具有自定义顺序的迭代器吗?
解决方案
当然有可能。在 Kotlin 中创建自定义迭代器是可能的,因为... Java。您可以将此代码作为基础:
class ListOfSets<E, S : Set<E>>(val from: List<S>) : Iterable<S> {
override fun iterator(): Iterator<S> {
return object : Iterator<S> {
val state = from.sortedBy { it.size }
var i = 0;
override fun hasNext(): Boolean = i < state.size
override fun next(): S = state[i++]
}
}
}
fun main() {
val sets = ListOfSets(
listOf(
setOf(1, 2, 3),
emptySet(),
setOf(1, 2, 3, 4),
setOf(1, 2),
setOf(1, 2, 1),
setOf(2, 2, 2, 2, 2)
)
)
for (set in sets) {
println(set)
}
}
它打印:
[]
[2]
[1, 2]
[1, 2]
[1, 2, 3]
[1, 2, 3, 4]
在这里要问自己的更好的问题是:为什么需要迭代器而不是sortedBy
直接在需要的地方对集合进行排序?
推荐阅读
- c++ - 如何在 C++ 程序中的 2 个特定字符之间比较 2 个文件中的文本行
- outlook - 全天事件的 originalStartTimeZone 不一致
- java - 如何确定两个方法调用层次结构相交的位置?
- google-sheets - 谷歌表格 - 如何将文本拆分为一行
- javascript - 如何将连接变量添加到在 React 中创建的选择选项中
- vbscript - 如何将参数(文件路径)传递给强制程序运行*没有*管理员权限的 VBScript?
- generics - 为什么在生命周期参数中使用“通用”一词?
- asp.net - 从文字控件显示 HTML
- assembly - mod(x,y) 适用于无符号整数,但不适用于 nand2tetris 中的有符号整数。我应该做出哪些改变?
- curl - curl - 使用 --form 上传带空格的文件名