kotlin

¿Lista perezosa en kotlin?



(1)

¿Cómo puedo lograr de una manera simple una lista perezosa en Kotlin? (Por ejemplo, enteros de la lista perezosa). He estado buscando en la documentación oficial, he estado buscando en Google sin un resultado consistente. Tal vez el mejor tutorial que he encontrado es este: ingrese la descripción del enlace aquí , pero me pregunto si hay una forma más "nativa de kotlin" para hacerlo, o debo implementarlo con el enlace que acabo de dar.

He encontrado lo siguiente en el blog oficial de Kotlin, aunque no pude obtener un artículo, con enteros [3] por ejemplo

var i = 0 integers = iterate{i++} integers[3] // does not work integers drop 3 // works


Como observaste correctamente, sequenceOf ( streamOf() en versiones anteriores) es la forma de obtener un flujo perezoso de números. A diferencia de Haskell, no existe tal cosa como una lista perezosa en la biblioteca estándar de Kotlin, y por una buena razón: el significado principal de "lista" en el mundo de Haskell y en el mundo de Java es diferente. En Haskell, una lista es principalmente una lista vinculada, un par de cabeza y cola, y la operación principal es tomar una cabeza de esa lista, que es fácil de implementar de manera eficiente y perezosa. En Kotlin / Java, list es una estructura de datos con acceso aleatorio a sus elementos, y la operación principal es get(int) , que puede implementarse de forma perezosa, por supuesto, pero su rendimiento a menudo será sorprendente para el usuario.

Por lo tanto, Kotlin usa los flujos para la pereza, porque son buenos cuando se trata de los casos de uso principales de las colecciones perezosas: la iteración, el filtrado, el mapeo y el acceso aleatorio es poco probable que se encuentren con mucha frecuencia.

Como usted, nuevamente, observa correctamente, drop permite acceder a los elementos por índice, lo que hace que las implicaciones de rendimiento sean más explícitas en el código.

Por cierto, ¿cuál es su caso de uso para las listas perezosas?