Em bibliotecas pré-Java 8 pesadas para lambda como Guava, as saídas usam interfaces comuns do Java Collection Framework, portanto é fácil transmiti-las para APIs externas / internas e ainda aproveitar uma computação lenta se o método da biblioteca o fizer (por exemplo, lazy filter()
e transform()
).
No entanto, em Java 8 Streams, a chamada para obter um Collection
/ Map
é terminal (ou seja ansioso) e que também irá alocar novas estruturas de dados para armazenar os resultados.
Para cálculos complicados com vários estágios e padrão de estratégia no meio, isso causa muitas alocações desnecessárias devido aos resultados intermediários.
Então, as pessoas pensam que é uma boa prática para APIs internas (ou seja, estratégias de padrão de estratégia) obter e retornar Stream
s ou devo apenas recorrer às APIs Guava preguiçosas, mas não simplificadas (trocadilhos, acho?)?
Editar:
Minha principal preocupação Stream
é que ele só pode ser consumido uma vez e passar algo como um Supplier<Stream<X>>
parece extremamente complicado. Quase o empurra apenas para passar em um Collection
e depois devolvê- stream()
lo (e pagando o custo de uma avaliação ágil naquele momento).