Ответ 1
Вероятно, самый простой способ - сначала преобразовать итератор в Sequence
, а затем в List
:
listOf(1,2,3).iterator().asSequence().toList()
результат:
[1, 2, 3]
У меня есть итератор строк из 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()
, но этого не существует.
Как я могу это достичь?
Вероятно, самый простой способ - сначала преобразовать итератор в Sequence
, а затем в List
:
listOf(1,2,3).iterator().asSequence().toList()
результат:
[1, 2, 3]
Я бы пропустил преобразование в последовательность, потому что это всего лишь несколько строк кода.
fun <T> Iterator<T>.toList(): List<T> =
ArrayList<T>().apply {
while (hasNext())
this += next()
}