En bibliotecas anteriores a Java 8 lambda-heavy como Guava, las salidas usan interfaces comunes de Java Collection Framework, por lo que es fácil pasarlas a API externas / internas y aún aprovechar algunos cálculos perezosos si el método de la biblioteca lo hace (por ejemplo, perezoso filter()
y transform()
).
Sin embargo, en Java 8 Streams, la llamada para obtener un terminal Collection
/ Map
es (es decir, ansioso) y también asignará nuevas estructuras de datos para contener los resultados.
Para cálculos complicados con múltiples etapas y patrones de estrategia en el medio, esto causa muchas asignaciones innecesarias debido a los resultados intermedios.
Entonces, ¿la gente piensa que es una buena práctica para las API internas (es decir, estrategias de patrones de estrategia) tomar y regresar Stream
s o debería simplemente recurrir a las API de guayaba perezosas pero no simplificadas (juego de palabras, supongo)?
Editar:
Mi principal preocupación Stream
es que solo se puede consumir una vez y pasar algo parecido a un se Supplier<Stream<X>>
ve extremadamente engorroso. Casi lo empuja a pasar un Collection
y luego volverlo stream()
(y pagar el costo de una evaluación entusiasta en ese punto).