¿Lista floja en kotlin?

¿Cómo puedo lograr de manera simple una list diferida en Kotlin? (Por ejemplo, list perezosa de integers). He estado buscando en la documentation oficial, he estado buscando en Google sin get resultados consistentes. 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 yo mismo con el enlace que acabo de dar.

Encontré lo siguiente en el blog oficial de Kotlin, aunque no pude get un elemento, con integers [3] por ejemplo

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

Como correctamente observó, sequenceOf ( streamOf() en versiones anteriores) es la forma de get una secuencia de numbers vagos. A diferencia de Haskell, no existe una list perezosa en la biblioteca estándar de Kotlin, y por una buena razón: el significado principal de "list" en el mundo de Haskell y el mundo de Java es diferente. En Haskell, una list es principalmente una list enlazada, un par de cabeza y queue, y la operación principal es tomar una cabeza de dicha list, que es fácil de implementar de manera eficiente de forma perezosa. En Kotlin / Java, la list es una estructura de datos con acceso aleatorio a sus elementos, y la operación principal es get(int) , que se puede implementar de forma perezosa, por supuesto, pero su performance a menudo será sorprendente para el usuario.

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

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

Por cierto, ¿cuál es tu caso de uso para las lists perezosas?

  • Enlace de datos de Android: @BindingAdapter en Kotlin no reconoce lambdas
  • ¿Cómo get los arguments de tipo reales de un parámetro genérico reificado en Kotlin?
  • Operador de times no resueltos
  • Cómo trabajar con Maps en Kotlin
  • ¿Por qué el comstackdor no encuentra la constante android.R.id.home?
  • La mejor forma de aplicar una transformación a cada elemento de una list al mismo time en Kotlin
  • error de decimalFormat.format ()
  • @PrePersist EventListener alternative for spring-data-mongo
  • Base de datos de Firebase serialize int to enum?
  • convert comparator en lambda en Kotlin
  • ¿Cómo transformar idiomáticamente los types que aceptan nulos en Kotlin?