kotlin имеет функцию карты, которая возвращает итератор? - PullRequest
0 голосов
/ 05 января 2020

Если я сопоставлю List в kotlin, используя .map, он вернет новый список. Есть ли эквивалент, который возвращает только итератор по соображениям производительности?

Это может быть то же самое для Java, поэтому я также включил этот тег в этот вопрос.

1 Ответ

4 голосов
/ 05 января 2020

Это зависит от того, что вы хотите сделать с итератором.

Kotlin имеет Sequence с, что эквивалентно Java 8 Stream с, что означает, что они ленивые : они просто предоставляют элементы при итерации (используя любую терминальную операцию, такую ​​как sum или count, также считается итерацией).

Так что, если вы ищете лень, то go для последовательностей .

Чтобы создать последовательность из списка, вы можете использовать asSequence():

val list = listOf(1, 2, 3)
val seq = list.asSequence().map { it * 2 }
// nothing happens as long as the sequence is not iterated upon
val result = coldSeq.toList() // now things are computed and added to a list

Вы также можете напрямую создать последовательность с помощью sequenceOf.

Если ваша цель на самом деле получить Java Iterator, вы можете получить один из последовательности, используя .iterator().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...