【问题标题】:Kotlin iterator to list?Kotlin 迭代器列出?
【发布时间】:2018-02-16 20:41:48
【问题描述】:

我有一个来自 fieldNamesJsonNode 的字符串迭代器:

val mm = ... //JsonNode
val xs = mm.fieldNames()

我想在保持计数的同时遍历字段,例如:

when mm.size() {
  1 -> myFunction1(xs[0])
  2 -> myFunction2(xs[0], xs[1])
  3 -> myFunction3(xs[0], xs[1], xs[2])
  else -> print("invalid")
}

显然上面的代码不起作用,因为xs Iterator 不能像这样被索引。我试图查看是否可以将迭代器转换为 mm.toList() 列表,但不存在。

我怎样才能做到这一点?

【问题讨论】:

标签: kotlin


【解决方案1】:

可能最简单的方法是先将迭代器转换为Sequence,然后再转换为List

listOf(1,2,3).iterator().asSequence().toList()

结果:

[1, 2, 3]

【讨论】:

  • 我用它作为json.keys().iterator().asSequence().toList()
【解决方案2】:

我会跳过对序列的转换,因为它只有几行代码。

fun <T> Iterator<T>.toList(): List<T> =
    ArrayList<T>().apply {
        while (hasNext())
            this += next()
    }

更新:

但请记住,附加到 ArrayList 并不是那么高效,因此对于更长的列表,您最好使用以下内容或 accepted answer

    fun <T> Iterator<T>.toList(): List<T> =
        LinkedList<T>().apply {
            while (hasNext())
                this += next()
        }.toMutableList()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-05
    相关资源
    最近更新 更多