Истребитель Котлин перечислить?

У меня есть итератор строк из fieldNames JsonNode:

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, итератор не может быть проиндексирован так. Я пытался проверить, могу ли я преобразовать итератор в список mm.toList(), но этого не существует.

Как я могу это достичь?

Ответ 1

Вероятно, самый простой способ - сначала преобразовать итератор в Sequence, а затем в List:

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

результат:

[1, 2, 3]

Ответ 2

Я бы пропустил преобразование в последовательность, потому что это всего лишь несколько строк кода.

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