Mor*_*roß 3 optimization intersection set hashset kotlin
我需要按自定义顺序(即基数升序)迭代集合列表。Kotlin 中可以创建自定义顺序的迭代器吗?
当然有可能。自 Java 以来,在 Kotlin 中创建自定义迭代器是可能的。您可以将此代码作为基础:
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)
}
}
Run Code Online (Sandbox Code Playgroud)
它打印:
[]
[2]
[1, 2]
[1, 2]
[1, 2, 3]
[1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)
在这里问自己的更好的问题是:为什么需要迭代器而不是sortedBy直接在需要的地方对集合进行排序?
| 归档时间: |
|
| 查看次数: |
2251 次 |
| 最近记录: |