Kotlin:自定义顺序的迭代器

标签 kotlin optimization set intersection hashset

我需要以自定义顺序遍历集合列表,即具有升序基数。在 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 对集合进行排序?

关于Kotlin:自定义顺序的迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62573762/

相关文章:

kotlin - 为什么 smart-cast 不处理这种情况?

android - 为什么在 Kotlin 中使用伴生对象来创建单例?

mysql - MySQL 查询性能缓慢

c# - 在 C# 中设置和获取

android - 无法在 kotlin `when` 表达式中使用 string.contains()

transactions - Jooq 交易 : connections are not released to pool, 如果在交易中抛出异常

c++ - 如何优化简单的高斯滤波器的性能?

Python轰炸机游戏算法复杂度优化

algorithm - 集合算法的 Ocaml 实现建议

algorithm - 如何找到多重集的所有分区(允许重复的集合)