¿La gente realmente usa la clase Stream de Scala en código de producción, o es principalmente de interés académico?Secuencia en el código de producción
Respuesta
No hay ningún problema con Stream
, excepto cuando las personas lo utilizan para reemplazar Iterator
- en contraposición a la sustitución de List
, que es la colección más similar a ella. En ese caso particular, uno debe ser cuidadoso en su uso. Por otro lado, también se debe tener cuidado al usar Iterator
, ya que cada elemento solo se puede repetir una vez.
Así que, como ambos tienen sus propios problemas, ¿por qué elegir Stream
? Me atrevería a decir que es simplemente que las personas están acostumbradas a Iterator
de Java, mientras que Stream
es algo funcional.
Bueno, Stream parece tener sus problemas, como cuando se usa en reducedLeft. –
Muchas buenas respuestas a esta pregunta; este fue para mí el más útil, ya que no entendía que usarlo como una Lista, no como un Iterador, es el enfoque correcto. Gracias a todos los que respondieron. –
Sí, lo uso, aunque tiende a ser algo como esto:
(as.toStream collect expensiveConversionToB) match {
case b #:: _ => //found my expensive b
case _ =>
}
Por supuesto, puede ser que utilice una visión no estricta y una find
para este ejemplo
Supongo que lo que me motiva es la constatación de que Stream es tan frágil en términos de uso de la memoria, que me daría escalofríos encontrarlo en el código de producción, a menos que no haya otra forma. –
Desde el La única razón para no usar Stream
s es que puede ser complicado asegurar que la JVM no esté manteniendo referencias a las primeras consideraciones, un enfoque que he usado es bastante bueno construir un Stream
y convertirlo inmediatamente a un Iterator
para Uso actual. Pierde un poco de las buenas propiedades de Stream
en el lado del uso, especialmente con respecto al retroceso, pero si solo va a hacer una pasada sobre el resultado, con frecuencia es más fácil construir una estructura que contorsionar en el hasNext
/next()
modelo de Iterator
directamente.
Aunque escribí que Iterator is what I want to use nearly all the time utilizo Stream
en el código de producción. Simplemente no asumo automáticamente que las células son basura recolectada.
A veces Stream
se adapta perfectamente al problema. Creo que la API da some good examples cuando se trate de recursividad ...
Gracias por el enlace a la otra pregunta, muy útil. –
Mire here. Esta publicación de blog describe cómo usar Scala Streams (junto con el archivo mapeado de memoria) para leer archivos grandes (1-2G) de manera eficiente.
No lo intenté todavía pero la solución parece razonable. Stream proporciona una buena abstracción sobre el bajo nivel de ByteBuffer
Java API para manejar un archivo mapeado en memoria como una secuencia de registros.
- 1. System.Diagnostics.Debug.WriteLine en el código de producción
- 2. Implementación de LRU en el código de producción
- 3. Flujo de trabajo en el código de producción
- 4. ¿Pruebas unitarias en el código de versión de producción?
- 5. C++: Usando typeid en el código de producción
- 6. ¿NHibernate SchemaUpdate es seguro en el código de producción?
- 7. ¿Eliminar el registro del código de producción en Android?
- 8. Cómo separar el código de producción y prueba en Haskell
- 9. ¿Se puede usar Cronómetro en el código de producción?
- 10. ¿Qué es el "código de nivel de producción"?
- 11. ¿Cómo administrar código de producción frecuentemente modificado?
- 12. código de prueba SQLite a código de producción proporción
- 13. ¿LINQ-to-NHibernate está listo para el código de producción?
- 14. ¿Cómo se mantiene el código de desarrollo y el código de producción?
- 15. Cómo refactorizar el código de prueba junto con el código de producción?
- 16. Código de generación de perfiles en la producción
- 17. Código de recarga en un servidor ring-clojure de producción
- 18. Despliegue de código en servidor (es) de producción desde Git
- 19. Rieles: cómo verifico el modo de desarrollador o de producción en el código
- 20. PHP debug_backtrace en el código de producción para obtener información sobre el método de llamada?
- 21. ¿Debo dejar el reflejo de bluetooth pirateado en el código de producción?
- 22. ¿Debo usar el JSAPI de Google en el código de producción?
- 23. DRY entre producción y Constantes de código de prueba
- 24. Más errores en las pruebas unitarias que en el código de producción
- 25. Asegurar contraseñas en el entorno de producción
- 26. ¿La Galería de comentarios de Google es útil en el código de producción?
- 27. ¿Realiza pruebas unitarias para código de no producción?
- 28. ¡Nunca use reflejo en el código de producción! ¿Qué hay de Python?
- 29. Burlarse de métodos no virtuales en C++ sin editar el código de producción?
- 30. ¿Alguna forma de usar los adaptadores Hamcrest en el código de producción?
¿Qué tiene de especial 'Stream' que te hace esta pregunta? ¿Por qué no debería uno usarlo en el código de producción? – Madoc
Es fácil agotar la memoria para uno. También parece recordar haber leído que su implementación muestra su edad. Entonces, tengo curiosidad de saber si la gente realmente lo usa para cosas que van más allá del Proyecto Euler. ;) –