Parece que tanto Iterator como Stream son flojos y le permiten seguir devolviendo elementos al contenido de su corazón. ¿Cuál es la diferencia entre los dos?¿Diferencia entre Iterator y Stream en Scala?
Respuesta
Stream memoises y Iterator no. Puede atravesar el mismo Stream varias veces y obtener el mismo resultado cada vez. Iterador, por otro lado, solo puede atravesarse una vez.
Ambos son construcciones para acceder a un elemento actual, con una lista aún desconocida de los elementos restantes (la cola perezosa).
Iterator
es una construcción imperativa que solo puede atravesar una vez.
Stream
es una construcción funcional. En teoría, puede atravesarlo varias veces (y como otros mencionaron, no volverá a calcular las partes ya calculadas), pero en la práctica porque los flujos son infinitos o muy grandes (es por eso que lo usa en primer lugar), sosteniendo la referencia al flujo completo no tiene mucho sentido (se encuentra con Out Of Memory bastante fácil).
- lo tanto, debe siempre definir flujos utilizando
def
y nunca lo puso en las variables locales que tienen un alcance de larga duración. - También hay sutilezas al escribir funciones recursivas utilizando arroyos,
- No puede haber un comportamiento inesperado que resulta del hecho de que la Scala de
Stream
no es perezoso en su cabeza, como
Generalmente es más seguro que la mente evitar llano Stream
s. Las alternativas están usando EphemeralStream
de Scalaz que auto-olvida partes no reconocidas usando referencias débiles, o usando Iteratees (vea también here) o something similiar.
Tengo curiosidad: ¿por qué EphemeralStream no es una implementación predeterminada? Siempre puedes reconstruir partes olvidadas del linaje de datos (es un lenguaje funcional). Esto suena como un gran defecto de diseño. – tribbloid
- 1. Diferencia entre Java Enumeration y Iterator
- 2. ¿Cuál es la diferencia entre los métodos iterator y view?
- 3. computeHash byte [] y Stream diferencia
- 4. ¿La diferencia entre 'HashSet' y 'Set' en Scala?
- 5. ¿Cuál es la diferencia entre :: ::: y en Scala
- 6. En Scala, ¿cuál es la diferencia entre Any y Object?
- 7. ¿Cuál es la diferencia entre toString y mkString en scala?
- 8. Diferencia entre tipos curry similares en Scala
- 9. ¿Cómo crear instancias y poblar un Scala Stream en Java?
- 10. ¿Cómo se traduce Stream-cons # :: en Scala?
- 11. consumir elementos de un scala Iterator
- 12. ¿Cuál es la relación entre Iterable e Iterator?
- 13. diferencia entre el método y la función de Scala
- 14. Diferencia entre Stream.CopyTo y MemoryStream.WriteTo
- 15. ¿Cuál es la diferencia entre scala @Serializable y Java Serializable?
- 16. ¿Existe una diferencia operativa entre std :: set :: iterator y std :: set :: const_iterator?
- 17. Semántica de Scala Traversable, Iterable, Sequence, Stream y View?
- 18. Diferencia entre MutableList y ListBuffer
- 19. Diferencia entre borrar y eliminar
- 20. ¿Las comparaciones entre iterator y const_iterator son ineficaces?
- 21. Consumo de memoria de un Scala Stream paralelo
- 22. Diferencia entre '.' y "." en java
- 23. Diferencia entre '' y "" en Python
- 24. Diferencia entre. y: en Lua
- 25. Diferencia entre == y === en JS
- 26. Diferencia entre la clase abstracta y Rasgo
- 27. MySQL: diferencia entre ', `,' y"
- 28. Diferencia entre. y #
- 29. Diferencia entre & y &
- 30. ¿Diferencia entre == y caso?
Con respecto a la memorización, si accedo al elemento Nth, ¿es el tiempo de acceso O (1) u O (N)? – ryeguy
@ryeguy Es O (n) porque Stream crea una lista vinculada a los valores del elemento de caché. –
OK, entonces, ¿cuál es la diferencia entre Stream e Iterable? –